多重背包 (n种物品,每种m个)
2015-08-19 16:29
183 查看
const int MAXV = 1 << 9; int d[MAXV],v,w; int m,n,V; //背包大小为V,n种物品,每种物品m个 void ZeroOnePack( int* f, int C, int W) { //01背包 int v; for( v = V; v >= C; v --) f[v] = max( f[v], f[v - C] + W); } void CompletePack( int* f, int C, int W) { //完全背包 int v; for( v = C; v <= V; v ++) f[v] = max( f[v], f[v - C] + W); } void MultiplePack( int* f, int C, int W, int M) { //多重背包 int k = 1; if( C * M >= V) { CompletePack( f, C, W); return; } while( k < M) { ZeroOnePack(f, C * k, W * k); M = M - k; k <<= 1; } ZeroOnePack( f, C * M, W * M); } int main() { // freopen("in.txt","r",stdin); while(cin>>n>>V) { memset(d,0,sizeof(d)); for(int i=0; i<n; i++) { scanf("%d%d%d",&m,&v,&w); MultiplePack(d,v,w,m); } cout<<d[V]<<endl; } return 0; }
相关文章推荐
- 皴EBS R12应用程序和数据库用户password
- 测试经验总结(“二次开发”)
- JS创建对象的几种方式
- 桌面支持--excel2007无法输入中文解决代码
- vim使用
- jquery的each()详细介绍
- 移动APP开发人员能力几何?
- bootcmd和bootargs参数
- [leetcode][string] Longest Palindromic Substring
- python 精华之函数式编程
- CCF 201312-2ISBN号码
- python 转化object 到json 然后存入redis以及从redis读取
- 黑马程序员———C语言———【strlen()和sizeof()的区别、排序、算法】
- 二维数组操作
- 从源码角度分析view的layout过程
- 4、Cocos2dx 3.0三,找一个小游戏开发Hello World 分析
- char[]数组与char *指针的区别
- Bootstrap--组件之按钮组
- VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)
- [LeetCode] Ugly Number