ACM 多重背包 pku 1276
2011-04-14 16:38
357 查看
PKU 1276
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define MAX 100001 int f[MAX];int content;//背包的容量 //01背包 void onepack(int cost,int value){ for(int j=content;j>=cost;--j) f[j]=f[j]>f[j-cost]+value?f[j]:f[j-cost]+value; }//完全背包 void complepack(int cost,int value){ for(int j=cost;j<=content;++j) f[j]=f[j]>f[j-cost]+value?f[j]:f[j-cost]+value; }//多重背包 void multpack(int cost,int value,int cnt){ if(cost *cnt>=content){ complepack(cost,value);return; } int k=1; while(k<cnt){ onepack(k*cost,k*value); cnt-=k; k=k*2; } onepack(cnt*cost,cnt*value); } int main(int argc, char *argv[]) { int cnt[1000],v[1000]; int n; while(cin>>content>>n){ memset(f,0,sizeof(f)); for(int i=0;i<n;++i) cin>>cnt[i]>>v[i]; for(int i=0;i<n;++i) //用价值v[i]充当费用,因为在凑够M的钱时,用去了M的v[i],相当于使背包的容量用去了v[i] multpack(v[i],v[i],cnt[i]); cout<<f[content]<<endl; } return 0; }
相关文章推荐
- PKU-1276-Cash Machine(多重背包模板)
- pku1276 Cash Machine(多重背包)
- (博客搬迁啦)pku1276多重背包问题(http://poj.org/problem?id=1276)
- 多重背包 pku 1276 Cash Machine
- pku 1276 Cash Machine 多重背包
- pku 1276(多重背包)
- ACM学习-动态规划-背包问题
- 西南交通大学第十三届ACM决赛 D.Music Problem 背包DP
- poj 1276 Cash Machine(多重背包问题)
- pku 1014(多重背包)
- PKU ACM 1045
- 杭电ACM 1276 士兵队列训练
- acm PKU题型分类
- Flip and Shift -- ACM PKU 1063 解题报告
- POJ-1276(多重背包)
- 单调队列 - 兼 ACM PKU POJ 3250 及 2823 解题报告
- pku acm 2488 源码
- POJ-1276 Cash Machine(多重背包问题)
- 整数分解和划分 - 兼 ACM PKU POJ 1221 解题报告
- POJ 1276 多重背包