hdu 2844 Coins (多重背包)
来源:互联网 发布:财政部会计报表软件 编辑:程序博客网 时间:2024/05/16 14:30
/*题意 :给你一些不同价值和一定数量的硬币,求用这些硬币可以组合成价值在[1 , m]之间的有多少dp[i]来表示容量为i这个包包可以装多少价值,最后计数是要计价值和容量相等的个数*/# include<stdio.h># include<algorithm># include<string.h>using namespace std;int sum,dp[100010];void CompletePack(int v){ for(int i=v; i<=sum; i++) { dp[i]=max(dp[i],dp[i-v]+v); }}void ZeroOnePack(int v){ for(int i=sum; i>=v; i--) dp[i]=max(dp[i],dp[i-v]+v);}void MultiplePack(int v,int num){ if(v*num>=sum) { CompletePack(v); return ; } int k=1; while(k<num) { ZeroOnePack(k*v); num-=k; k*=2; } ZeroOnePack(num*v);}int main(){ int n,m,i; int v[110],num[110]; while(~scanf("%d%d",&n,&m),n+m) { for(i=0; i<n; i++) { scanf("%d",&v[i]); } for(i=0; i<n; i++) { scanf("%d",&num[i]); } sum=m; memset(dp,0,sizeof(dp)); for(i=0; i<n; i++) { MultiplePack(v[i],num[i]); } int count=0; for(i=1; i<=sum; i++) { if(dp[i]==i) count++; } printf("%d\n",count); } return 0;}
/*poj 1742 */# include<stdio.h># include<algorithm># include<string.h>using namespace std;int sum;bool dp[100010];int max1(int a,int b){ return a>b;}void CompletePack(int v){ for(int i=v; i<=sum; i++) { dp[i]=dp[i]|dp[i-v]; }}void ZeroOnePack(int v){ for(int i=sum; i>=v; i--) dp[i]=dp[i]|dp[i-v];}void MultiplePack(int v,int num){ if(v*num>=sum) { CompletePack(v); return ; } int k=1; while(k<num) { ZeroOnePack(k*v); num-=k; k*=2; } ZeroOnePack(num*v);}int main(){ int n,m,i; int v[110],num[110]; while(~scanf("%d%d",&n,&m),n+m) { for(i=0; i<n; i++) { scanf("%d",&v[i]); } for(i=0; i<n; i++) { scanf("%d",&num[i]); } sum=m; memset(dp,0,sizeof(dp)); dp[0]=1; for(i=0; i<n; i++) { MultiplePack(v[i],num[i]); } int count=0; for(i=1; i<=sum; i++) { if(dp[i]) count++; } printf("%d\n",count); } return 0;}
0 0
- hdu 2844 Coins 多重背包
- hdu 2844 Coins 多重背包
- HDU 2844 Coins -- 多重背包
- hdu 2844 Coins - 多重背包
- hdu 2844 Coins(多重背包)
- hdu 2844 Coins 多重背包
- Coins hdu 多重背包 2844
- HDU 2844 Coins 多重背包
- HDU-2844-Coins(多重背包)
- HDU 2844 Coins(多重背包)
- HDU 2844:Coins(多重背包)
- HDU 2844(Coins)多重背包
- hdu 2844 Coins (多重背包)
- HDU - 2844 Coins(多重背包)
- HDU 2844 Coins 多重背包
- hdu 2844 coins 多重背包
- hdu 2844 Coins【多重背包】
- HDU 2844-Coins(多重背包)
- Android中AsyncTask类与AsyncQueryHandler类的用法
- 子网划分两个例子---经典
- 数组存储在栈中还是堆中
- 通过Intent传递一些二进制数据的方法有哪些?
- 黑马程序员——36,Collections工具类,Arrays工具类,高级for循环,可变参数,静态导入
- hdu 2844 Coins (多重背包)
- Java中用System.getProperty("...")获取系统属性
- linux命令技巧
- 16进制的 RBG值 颜色 转换
- 7.Builder Pattern的学习和使用
- 几种JVM垃圾回收机制
- 【UML】UML之用例图
- 在Linux下使用RAID(1):介绍 RAID 的级别和概念
- English on the way