习题地址  https://www.acwing.com/problem/content/description/7/

题目描述
有 N 种物品和一个容量是 V 的背包。

物品一共有三类:

第一类物品只能用1次(01背包);
第二类物品可以用无限次(完全背包);
第三类物品最多只能用 si 次(多重背包);
每种体积是 vi,价值是 wi。

求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。
输出最大价值。

输入格式
第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。

接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。

si=−1 表示第 i 种物品只能用1次;
si=0 表示第 i 种物品可以用无限次;
si>0 表示第 i 种物品可以使用 si 次;
输出格式
输出一个整数,表示最大价值。

数据范围
0<N,V≤1000
0<vi,wi≤1000
−1≤si≤1000

输入样例

  -

输出样例:

算法1
前三种背包处理的混合型号
01 背包则直接放入数据容器中
多重背包则化解成 01 背包 放入数据容器中(见多重背包II习题 进行二进制优化)
完全背包也直接放入数据容器中

此刻数据容器vector[HTML_REMOVED] things;中就只有01背包和完全背包 那么就进行遍历处理

 #include <iostream>
#include <cstring>
#include <algorithm>
#include <vector> using namespace std; const int N = ; int n,m;
int f[N]; struct Thing{
int kind;
int v,w;
};
vector<Thing> things; int main()
{
cin >> n>>m;
for(int i = ;i<n;i++)
{
int v,w,s;
cin >> v >> w>> s;
if(s < )
{
things.push_back({-,v,w});
}else if(s == ) things.push_back({,v,w});
else{
for(int k = ;k <= s; k*=){
s -=k;
things.push_back({-,v*k,w*k});
}
if(s > ) things.push_back({-,v*s,w*s});
}
} for(auto thing:things)
{
if(thing.kind < ){
for(int j = m;j >= thing.v;j--) f[j] = max(f[j],f[j-thing.v]+thing.w);
}else{
for(int j = thing.v;j <= m;j++) f[j] = max(f[j],f[j-thing.v]+thing.w);
}
} cout << f[m] << endl; return ;
} 作者:defddr
链接:https://www.acwing.com/solution/acwing/content/2198/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最新文章

  1. Leetcode: Convert sorted list to binary search tree (No. 109)
  2. JAVA 技术手册 卷1 第十四章『多线程』 读书摘要
  3. Queue 的用法
  4. jQuery自动加载更多程序
  5. 46. Partition List
  6. Sql 中text类型字段判断是否为空
  7. 数据结构-AVL树的旋转
  8. 服务器的Arch Linux,CentOS的,Debian的,Fedora的,Gentoo的,openSUSE的,Slackware的,和Ubuntu哪个好
  9. [Everyday Mathematic]20150216
  10. ecshop订单中配送方式报错
  11. Poj 1503 Integer Inquiry
  12. 理解screenX clientX pageX概念
  13. 关于matlab中textread
  14. C# html转mht
  15. python中xrange用法分析
  16. CFile、CStdioFile、FILE和其他文件操作(转+总结)
  17. 使用LINQ生成Where的SQL语句
  18. Python Redis hash
  19. IDEA运行TestNG报错rg.testng.TestNGException: org.xml.sax.SAXParseException;
  20. 微软BI 之SSIS 系列 - 对于平面文件中 NULL 值处理过程中容易极易混淆的几个细节

热门文章

  1. PHP+jQuery中国地图热点数据统计展示实例
  2. SpringMVC框架之第二篇
  3. JS---DOM---节点的概念,属性,和获取相关的节点
  4. JS基础语法---Array对象的方法
  5. RCS MO_Client&amp;server Net log 摘录
  6. Android 程序分析环境搭建-Android 9 -代码下载编译
  7. SpringCloud之Zuul:服务网关
  8. SpringCloudGateWay修改请求路径,从注册中心获得服务
  9. bayaim_Centos7.6_mysql源码5.7-多my.cnf_20190424.txt
  10. rpm包安装java jar开机自启