习题地址  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

输入样例
4 5
1 2 -1
2 4 1
3 4 0
4 5 2
输出样例:
8

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

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

 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <vector>
 5
 6 using namespace std;
 7
 8 const int N = 1010;
 9
10 int n,m;
11 int f[N];
12
13 struct Thing{
14     int kind;
15     int v,w;
16 };
17 vector<Thing> things;
18
19
20 int main()
21 {
22     cin >> n>>m;
23     for(int i = 0;i<n;i++)
24     {
25         int v,w,s;
26         cin >> v >> w>> s;
27         if(s < 0)
28         {
29             things.push_back({-1,v,w});
30         }else if(s == 0) things.push_back({0,v,w});
31         else{
32             for(int k = 1;k <= s; k*=2){
33                 s -=k;
34                 things.push_back({-1,v*k,w*k});
35             }
36             if(s > 0) things.push_back({-1,v*s,w*s});
37         }
38     }
39
40     for(auto thing:things)
41     {
42         if(thing.kind < 0){
43             for(int j = m;j >= thing.v;j--) f[j] = max(f[j],f[j-thing.v]+thing.w);
44         }else{
45             for(int j = thing.v;j <= m;j++) f[j] = max(f[j],f[j-thing.v]+thing.w);
46         }
47     }
48
49     cout << f[m] << endl;
50
51     return 0;
52 }
53
54 作者:defddr
55 链接:https://www.acwing.com/solution/acwing/content/2198/
56 来源:AcWing
57 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

View Code

转载于:https://www.cnblogs.com/itdef/p/10913463.html

acwing 7 混合背包相关推荐

  1. 动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包,混合背包

    动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包 01背包 && 完全背包 && 分组背包 の 视频教程:https://www.bilibi ...

  2. Codevs 3269 混合背包

    3269 混合背包 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值 ...

  3. 九十一、动态规划系列 背包问题之混合背包

    @Author:Runsen @Date:2020/09/27 背包系列,是动态规划里一类典型的问题,主要有:01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,有依赖背包和泛化物品等.也 ...

  4. P1833 樱花——混合背包 二进制优化成01背包

    P1833樱花 题目大意:有n颗樱花树,你的总时间为T,现在n课树,每次观看要花费w时间,能获取v点价值,最多能参观s次,如果s等于0,则可以观看无限次,问你在T时间内 获得的最大价值是多少. 思路: ...

  5. CODEVS 3269 混合背包

    一道裸的混合背包题目.可是忘记了去重一直TLE,就是假设体积<=全然背包的01.和多重背包都要被全然背包代替,由于他的数量没限制所以用起来更方便. 题目连接:http://codevs.cn/p ...

  6. Codevs 3269 混合背包(二进制优化)

    3269 混合背包 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为V ...

  7. hdu 3535 AreYouBusy 经典混合背包

    借此机会,整理一下背包中的某几类问题: 物品分组,每组至少选一个: 这个时候 写法1:看别人博客,这样写省去了某些麻烦问题 达不到的dp值为-INF dp[i][j]=max(dp[i][j],max ...

  8. AcWing 1714.混合牛奶

    AcWing 1714.混合牛奶 题目链接 题目描述: 农业,尤其是生产牛奶,是一个竞争激烈的行业. Farmer John 发现如果他不在牛奶生产工艺上有所创新,他的乳制品生意可能就会受到重创! 幸 ...

  9. 一本通 1270:【例9.14】混合背包(混合背包模板题)

    [题目描述] 一个旅行者有一个最多能装V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,-,Wn,它们的价值分别为C1,C2,-,Cn.有的物品只可以取一次(01背包),有的物品可以取无限次( ...

最新文章

  1. LeetCode Length of Last Word(最后一个单词的长度)
  2. 【数学和算法】最小二乘法,SVD奇异值分解、LU分解的应用场景
  3. python的django框架与springboot_Django框架简介
  4. python关于列表增加元素的几种操作
  5. linux+crontab执行php,如何使用Linux的Crontab执行PHP脚本
  6. python yield和yieldfrom,Python:对于yield与yield from 的理解
  7. mysql数据库如何让表单与表单关联共用_这样的表单如何做到和数据库相连,我想知道与SQL和mysql这两种的连接方法,在线等,谢谢各位!...
  8. php中add函数,php中addslashes()和addclashes()函数的区别分析
  9. jpa 去重_spring boot jpa 表关联查询分组 group by 去重
  10. SQL注入——基于联合查询的字符型GET注入(三)
  11. linux命令行大全 笔记,《Linux命令行大全》读书笔记
  12. python 识别图形验证码_Python图片验证码降噪处理实例!此乃识别验证码神技!...
  13. 武汉大学计算机学院创业老师,胡瑞敏 - 教师简历 CV- 武汉大学计算机学院
  14. Spring依赖注入@Autowired原理解析(一)之寻找需要注入的属性
  15. R语言 openair 做后向轨迹
  16. 硬件设计--阻抗匹配
  17. python打开网页后点击网页按钮_单击网页按钮的Python脚本
  18. ASDFZ 3633 -- 排兵布阵
  19. 【C语言】你还不会指针吗?不妨来一起攻克指针这个难点
  20. 免安装版MySQL(解压版)安装详细教程及注意事项

热门文章

  1. Spring Cloud(6.1):搭建OAuth2 Authorization Server
  2. luogu3093 牛奶调度
  3. Vmware快速安装linux虚拟机(SUSE)
  4. Sql Server 监控 Job 执行情况
  5. 建立ARM交叉编译环境 (arm-none-linux-gnueabi-gcc with EABI)
  6. gd-flags |= GD_FLG_RELOC; 问题遗留
  7. matlab解常微分方程,Matlab中解常微分方程的ode45
  8. asp编程工具_使用ASP.NET Core构建RESTful API的技术指南
  9. python新手程序_推荐:一个适合于Python新手的入门练手项目
  10. 图解ARP协议(二)ARP攻击原理与实践