《动态规划》hdoj acm 3.3.2 多重背包
2015-11-12 22:34
323 查看
#include<stdio.h> #include<string.h> int a[102],c[102],dp[100005]; int max(int a,int b) { return a>b?a:b; } void CompletePack(int v,int w,int m) { for(int j=v;j<=m;j++) dp[j]=max(dp[j],dp[j-v]+w); } void ZeroOnePack(int v,int w,int m) { for(int j=m;j>=v;j--) dp[j]=max(dp[j],dp[j-v]+w); } void MultiPack(int v,int w,int m,int c) { if(v*c>=m) CompletePack(v,w,m); else { int k=1; while(k<c) { ZeroOnePack(k*v,k*w,m); c-=k; k*=2; } ZeroOnePack(c*v,c*w,m); } } int main() { int n,i,j,m,k; while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) break; for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n;i++) scanf("%d",&c[i]); memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) { MultiPack(a[i],a[i],m,c[i]); } int count=0; for(i=1;i<=m;i++) if(dp[i]==i) count++; printf("%d\n",count); } return 0; }
相关文章推荐
- 解决js中setTimeout()函数的兼容问题
- 命令模式
- 桥接模式
- 单例模式
- MySQL--- DDL、DML、DCL都包括那些语句?
- Android ScheduledFuture介绍
- 《动态规划》hdoj acm 3.3.1 简单背包
- 【Server 之 二】弱网络下的游戏服务器设计
- 2015-11-12
- 迭代器模式
- (C#) 求两个数组的交集
- 通过Windows Server 2008 R2建立iSCSI存储
- c++ 11 多线线程系列----future
- 55.Oracle数据库SQL开发之 高级查询——使用TRANSLATE函数
- imageView默认图片设置
- 想成为Java高手的25个学习目标
- 蜗牛历险记(开篇)
- jquery对象访问
- 组合模式
- 54.Oracle数据库SQL开发之 高级查询——使用集合操作符