题目描述

组合背包:有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。

DD大牛的伪代码
for i = 1 to N
if 第i件物品属于01背包
ZeroOnePack(F,Ci,Wi)
else if 第i件物品属于完全背包
CompletePack(F,Ci,Wi)
else if 第i件物品属于多重背包
MultiplePack(F,Ci,Wi,Ni)

输入

第一个数为数据组数n 1<=n<=10

接下来n组测试数据,每组测试数据由2部分组成。

第一行为背包容量V,物品种类数N。1<=V<=30000,1<=N<=200

接下来N行每行三个数为物品价值v,物品重量w,物品件数M。M=233表示物品无限。

1<=v,w<=200, 1<=M<=25

输出

对于每组数据,输出一行,背包能容纳的最大物品价值

输入样例

1
10 3
2 2 233
3 2 1
4 3 3

输出样例

13
题目来源:http://biancheng.love/contest/10/problem/F/index
解题思路:
组合背包:0-1背包、完全背包、多重背包。
因此需要结合上述三种背包问题的解决方法来solve组合背包
0-1背包代码:
 void Zeronepack(int w,int v)
{
for(int i=V; i>=w; i--)
if(dp[i]<dp[i-w]+v)
dp[i]=dp[i-w]+v;
}

完全背包代码:

 void Compack(int w,int v)
{
for(int i=w; i<=V; i++)
if(dp[i]<dp[i-w]+v)
dp[i]=dp[i-w]+v;
}

多重背包代码:

 void Multipack(int w,int v,int num)
{
int k;
if(w*num>=V)
{
Compack(w,v);
return;
}
for(k=; k<num; k<<)
{
Zeronepack(k*w,k*v);
num-=k;
}
Zeronepack(num*w,num*v);
}

本题组合背包代码:

 #include <bits/stdc++.h>
int dp[];
int V,N; void Compack(int w,int v)
{
for(int i=w; i<=V; i++)
if(dp[i]<dp[i-w]+v)
dp[i]=dp[i-w]+v;
} void Zeronepack(int w,int v)
{
for(int i=V; i>=w; i--)
if(dp[i]<dp[i-w]+v)
dp[i]=dp[i-w]+v;
} void Multipack(int w,int v,int num)
{
int k;
if(w*num>=V)
{
Compack(w,v);
return;
}
for(k=; k<num; k<<)
{
Zeronepack(k*w,k*v);
num-=k;
}
Zeronepack(num*w,num*v);
} int main()
{
int kase,v,w,m;
scanf("%d",&kase);
while(kase--)
{
memset(dp,,sizeof(dp));
scanf("%d%d",&V,&N);
for(int i=;i<=N;i++)
{
scanf("%d%d%d",&v,&w,&m);
if(m==)
Zeronepack(w,v);
else if(m==)
Compack(w,v);
else
Multipack(w,v,m);
}
printf("%d\n",dp[V]);
}
return ;
}

最新文章

  1. 7 Must Read Python Books
  2. zabbix 3.0快速安装简介(centos 7)
  3. C# 非托管内存使用时的注意事项
  4. 从容而优雅(leisurely and elegant)
  5. C#二维数组(矩形数组,交错数组)
  6. JS 获取Button控件的提交类型
  7. 如何创建,增加swap
  8. ios开发中如何实现软件版本更新
  9. C#执行参数为游标 返回一个记录集的Oracle存储过程
  10. Clojure——学习迷宫生成
  11. LINUX 笔记-重定向 :&lt;,&lt;&lt;,&gt;,&gt;&gt;
  12. bzoj 2119: 股市的预测
  13. java 二维码解析和生成
  14. 我的第一个flink_java程序
  15. Oracle之 dmp导入/导出、数据库操作等过程中的字符集问题
  16. Beta阶段冲刺---Day2
  17. input type= file 如何更改自定义的样式
  18. Winrar目录穿越漏洞复现
  19. MyEclipse 8.6插件下载
  20. Python3:Requests模块的异常值处理

热门文章

  1. 红黑树(四)之 C++的实现
  2. 红黑树(五)之 Java的实现
  3. Only top uni produces good ppt.
  4. nodejs morgan包
  5. python之异常处理
  6. WCF回顾一、基本概念和应用场景
  7. Parameter Config
  8. UnityShader快速上手指南(一)
  9. Winform开发框架之权限管理系统改进的经验总结(3)-系统登录黑白名单的实现
  10. cmd命令行编译和运行java程序报错 NoClassDefFoundError