hdu 2844 Coins 多重背包 二进制优化 算是否能组成的背包
2013-03-03 20:24
513 查看
hdu 2844 Coins
#include<stdio.h> #include<string.h> #define size 100010 #define csize 110 int dp[size]; int c[csize]; int num[csize]; int v; int max(int a,int b) { return a>b?a:b; } void ZeroOnePack(int cost,int weight) { int i; for(i=v;i>=cost;i--) { if(dp[i-cost]==1) dp[i]=1; } } void CompletePack(int cost,int weight) { int i; for(i=cost;i<=v;i++) if(dp[i-cost]==1) dp[i]=1; } void MultiplePack(int cost,int weight,int amount) { if(cost*amount>=v) { CompletePack(cost,weight); return; } int k=1; while(k<amount) { ZeroOnePack(k*cost,k*weight); amount=amount-k; k=k*2; } ZeroOnePack(amount*cost,amount*weight); } int main() { int i,m,n; while(scanf("%d %d",&n,&m)&&m+n!=0) { v=m; memset(dp,0,sizeof(dp)); dp[0]=1; for(i=0;i<n;i++) scanf("%d",&c[i]); for(i=0;i<n;i++) scanf("%d",&num[i]); for(i=0;i<n;i++) { MultiplePack(c[i],1,num[i]); } int count=0; for(i=1;i<=m;i++) { if(dp[i]!=0) count++; } printf("%d\n",count); } return 0; }
相关文章推荐
- HDU 2844 Coins (多重背包+二进制优化模板)
- HDU 2844 Coins(多重背包 + 二进制优化 + 01背包)
- HDU 2844 Coins(多重背包+二进制优化)
- hdu 2844 Coins 多重背包模板题 ,二进制优化。据说是楼教主的男人八题之一
- HDU 2844 Coins(多重背包【二进制优化】)
- hdu 2844 Coins(多重背包+二进制优化)
- HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)
- hdu 2844 Coins(dp 多重背包 二进制优化)
- 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 (多重背包+二进制优化)
- DP(分组背包两种二进制优化) Problem S:Coins(HDU 2844)
- hdu 2844 Coins (多重背包+ 二进制优化)
- hdu 2844 Coins(多重背包+二进制优化)