多重背包模板
2017-08-06 11:04
323 查看
#include<iostream> #include<cstring> #include<cstdio> #define MAXV 100001 #define MAXN 101 #define INF -100000000 using namespace std; int d[MAXV],weight[MAXN],cnt[MAXN],V; void OneZeroPack(int c,int w) { int i; for(i=V; i>=c; i--) d[i]=max(d[i],d[i-c]+w); } void CompletePack(int c,int w) { int i; for(i=c; i<=V; i++) d[i]=max(d[i],d[i-c]+w); } void MultPack(int c,int w,int n) { if(n*c>=V) { CompletePack(c,w); return ; } int k=1; while(k<=n) { OneZeroPack(k*c,k*w); n=n-k; k=k*2; } OneZeroPack(n*c,n*w); } int main() { int n,i; while(scanf("%d %d",&n,&V)==2&&(n||V)) { for(i=0;i<=V;i++) d[i]=INF; d[0]=0; for(i=0;i<n;i++) scanf("%d",&weight[i]); for(i=0;i<n;i++) scanf("%d",&cnt[i]); for(i=0;i<n;i++) MultPack(weight[i],weight[i],cnt[i]); int ans=0; for(i=1;i<=V;i++) if(d[i]>0) ans++; printf("%d\n",ans); } return 0; }
相关文章推荐
- hdu 2159 二维费用背包+模板
- hdu1171(多重背包模板题)
- 背包问题模板,POJ(1014)
- hdu4508 湫湫系列故事——减肥记I(完全背包模板)
- HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包模板题)
- 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 2191 (多重背包-->>01背包) (模板)
- hdu 2602 简单0-1背包模板题
- 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活--hdu2191(多重背包模板)
- 完全背包 (模板题目)
- POJ 1276 Cash Machine ( 多重背包模板题目 )
- HDU - 1059 多重背包模板题
- 背包之01,完全,多重模板
- 多重背包模板
- HDU 1114 Piggy-Bank 完全背包模板
- Bone Collector(0-1背包模板)
- Cash Machine POJ - 1276 (多重背包(模板))
- 树状数组 背包 模板
- hdu 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包模板题)
- ACboy needs your help-分组背包模板题
- 01背包模板、全然背包 and 多重背包(模板)