基本分组背包
来源:互联网 发布:php手机号正则表达式 编辑:程序博客网 时间:2024/06/03 17:59
有n件物品和一个容量为v的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为几组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大.
设f[k][v]表示前k组物品花费费用v能取得的最大价值,则有:
f[k][v]=max{f[k-1][v],f[k-1][v-c[i]]+w[i]}//i是枚举第k组中的物品
基本代码:
for(int k=1;k<=n;k++) for(int j=v;j>=0;j--)//枚举钱 for(int i=a[k][1];i<=gs[k];i++) //枚举第k组中的物品 f[v]=max(f[v],f[v-c[a[k][i]]]+w[a[k][i]]);
ps:
枚举物品的循环必须放在内层,这样才能保证每一组内的物品最多只有一个会被添加到背包中。
- 基本分组背包
- 分组背包
- 分组 背包
- 分组背包
- 分组背包
- 分组背包
- 分组背包
- 分组背包
- 分组背包
- 分组背包
- 分组背包
- 分组背包
- 分组背包
- 分组背包
- 分组背包
- 分组背包
- 分组背包
- 分组背包
- Structs2上传
- 对话框支持拖拽文件操作
- java字节码修改
- SVN文件冲突
- assert()函数用法总结
- 基本分组背包
- 拖动视图,视图的父视图根据情况变化.
- 程序代码,常量,局部变量,全局变量在内存中的保存位置
- 重温C语言 - 编译连接与函数
- C/C++中extern的用法
- android Http通信开发详解
- C++异常处理
- XML 解析
- VC MFC 钩子 实现 自绘 窗体 标题栏 非客户区(VER.2013-11-06)