ZCMU - 1381: 简单题

简介: ZCMU - 1381: 简单题

题目链接:点击打开链接


题目大意:略。


解题思路:多重背包。


AC 代码

#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof a)
using namespace std;
typedef long long ll;
const int MAXN = 10000;
int dp[MAXN];
int val[MAXN],weight[MAXN],num[MAXN];
int n,m;
void ZeroOne_Pack(int val,int weight,int m)
{
    for(int j=m;j>=weight;j--)
        if(j==weight || dp[j-weight]!=0) // 判断状态是否可转移
            dp[j]=max(dp[j],dp[j-weight]+val);
}
void Complete_Pack(int val,int weight,int m)
{
    for(int j=weight;j<=m;j++)
        if(j==weight || dp[j-weight]!=0) // 判断状态是否可转移
            dp[j]=max(dp[j],dp[j-weight]+val);
}
int Multi_Pack(int val[],int weight[],int n,int m)
{
    mem(dp,0);
    for(int i=0;i<n;i++)
    {
        if(num[i]*weight[i]>m)
        {
            Complete_Pack(val[i],weight[i],m);
        }
        else
        {
            int k=1;
            while(k<num[i])
            {
                ZeroOne_Pack(k*val[i],k*weight[i],m);
                num[i]-=k;
                k<<=1;
            }
            ZeroOne_Pack(num[i]*val[i],num[i]*weight[i],m);
        }
    }
    return dp[m];
}
int main()
{
    int n,m=8500;
    while(~scanf("%d",&n) && n)
    {
//        for(int i=0;i<n;i++)
//            scanf("%d%d",&val[i],&weight[i]);
//
//        int rs=ZeroOne_Pack(val,weight,m);
//
//
//        int rs=Complete_Pack(val,weight,m);
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&weight[i],&num[i]);
            val[i]=weight[i]; // 根据题意,价值和重量是等价的
        }
        Multi_Pack(val,weight,n,m);
        sort(dp,dp+m+1);
//        for(int i=0;i<=m;i++)
//        {
//            printf("%d ",dp[i]);
//        }
//        puts("");
        int i,j=1;
        for(i=0;i<=m;i++)
        {
            if(dp[i]!=0)
            {
                if(dp[i]==j)
                {
                    j++;
                }
                else // 匹配不上,说明此时的 j 就是最小称不到的量
                {
                    printf("%d\n",j);
                    break;
                }
            }
        }
        if(i==m+1) // 匹配完了标记,则 dp[m]+1 为最终结果
        {
            printf("%d\n",dp[m]+1);
        }
    }
    return 0;
}
目录
相关文章
|
9天前
|
弹性计算 运维 安全
访问控制(RAM)|云上程序使用临时凭证的最佳实践
STS临时访问凭证是阿里云提供的一种临时访问权限管理服务,通过STS获取可以自定义时效和访问权限的临时身份凭证,减少长期访问密钥(AccessKey)泄露的风险。本文将为您介绍产品原理,以及具体的使用步骤。
150950 3
|
7天前
|
数据采集 存储 运维
提升团队工程交付能力,从“看见”工程活动和研发模式开始
本文从统一工程交付的概念模型开始,介绍了如何将应用交付的模式显式地定义出来,并通过工具平台落地。
119851 2
|
8天前
|
监控 负载均衡 Java
深入探究Java微服务架构:Spring Cloud概论
**摘要:** 本文深入探讨了Java微服务架构中的Spring Cloud,解释了微服务架构如何解决传统单体架构的局限性,如松耦合、独立部署、可伸缩性和容错性。Spring Cloud作为一个基于Spring Boot的开源框架,提供了服务注册与发现、负载均衡、断路器、配置中心、API网关等组件,简化了微服务的开发、部署和管理。文章详细介绍了Spring Cloud的核心模块,如Eureka、Ribbon、Hystrix、Config、Zuul和Sleuth,并通过一个电商微服务系统的实战案例展示了如何使用Spring Cloud构建微服务应用。
103466 7
|
9天前
|
人工智能 Serverless 对象存储
让你的文档从静态展示到一键部署可操作验证
通过函数计算的能力让阿里云的文档从静态展示升级为动态可操作验证,用户在文档中单击一键部署可快速完成代码的部署及测试。这一改变已在函数计算的活动沙龙中得到用户的认可。
120116 126
|
8天前
|
SQL 存储 数据可视化
Ganos H3地理网格能力解析与最佳实践
本文介绍了Ganos H3的相关功能,帮助读者快速了解Ganos地理网格的重要特性与应用实践。H3是Uber研发的一种覆盖全球表面的二维地理网格,采用了一种全球统一的、多层次的六边形网格体系来表示地球表面,这种地理网格技术在诸多业务场景中得到广泛应用。Ganos不仅提供了H3网格的全套功能,还支持与其它Ganos时空数据类型进行跨模联合分析,极大程度提升了客户对于时空数据的挖掘分析能力。
|
15天前
|
人工智能 编解码 对象存储
一键生成视频!用 PAI-EAS 部署 AI 视频生成模型 SVD 工作流
本教程将带领大家免费领取阿里云PAI-EAS的免费试用资源,并且带领大家在 ComfyUI 环境下使用 SVD的模型,根据任何图片生成一个小短视频。
|
13天前
|
数据采集 运维 监控
DataphinV4.0来啦:自定义全局角色 ,实时研发覆盖全部署场景,个性化企业配置看本期
本次V4.0版本升级,Dataphin支持自定义全局角色、自定义逻辑表命名规范、Flink on K8s的部署模式,提升企业级适配能力,灵活匹配企业特色;将集成任务快速从组件模式切换为脚本模式、支持外部触发类型节点等,提升研发平台易用性,助力高效开发便捷运维。
90947 1
|
14天前
|
SQL Kubernetes 调度
Flink 流批一体在模型特征场景的使用
本文整理自B站资深开发工程师张杨老师在 Flink Forward Asia 2023 中 AI 特征工程专场中的分享。
76863 3
Flink 流批一体在模型特征场景的使用
|
19天前
|
存储 关系型数据库 数据库
超1/3中国500强企业都在用的「汇联易」,为什么选用阿里云RDS?
迎峰而上:汇联易依托阿里云RDS通用云盘,加速业务智能化升级
超1/3中国500强企业都在用的「汇联易」,为什么选用阿里云RDS?
|
8天前
|
存储 缓存 安全
深度解析JVM世界:JVM内存结构
深度解析JVM世界:JVM内存结构