【题目链接】

ybt 1270:【例9.14】混合背包

【题目考点】

1. 动态规划:混合背包

【解题思路】

混合背包问题,解法如下:

解法1:根据第i物品存在的个数进行分类讨论。

  • 如果只有1个第i物品,那么使用01背包的方法添加该物品。
  • 如果有无数个第i物品,那么使用完全背包的方法添加该物品。
  • 如果有有限个第i物品,那么使用多重背包的方法添加该物品。

解法2:转为多重背包问题

有1个第i物品,也相当于有有限个第i物品,01背包和多重背包的情况可以合并。
如果是可以取无限个第i物品,实际也不可能真的取无限个。由于背包大小为m,假设第i物品的重量为w[i],第i物品最多可以取m/w[i]个。这里就认为第i物品只有m/w[i]个,这样把本来需要用完全背包方法解决的情况,也转化为了多重背包问题。
最后,该问题整体就是一个多重背包问题。

【题解代码】

解法1:分类讨论

#include<bits/stdc++.h>
using namespace std;
#define M 205
#define N 35
int dp[M], w[N], c[N], p[N];
int main()
{int n, m;cin >> m >> n;for(int i = 1; i <= n; ++i)cin >> w[i] >> c[i] >> p[i];for(int i = 1; i <= n; ++i){if(p[i] == 1)//01背包 {for(int j = m; j >= w[i]; j--)dp[j] = max(dp[j], dp[j-w[i]]+c[i]);}else if(p[i] == 0)//完全背包 {for(int j = w[i]; j <= m; ++j)dp[j] = max(dp[j], dp[j-w[i]]+c[i]); }else//多重背包 {for(int j = m; j >= w[i]; --j)for(int k = 0; k*w[i] <= j && k <= p[i]; ++k)dp[j] = max(dp[j], dp[j-k*w[i]]+k*c[i]);}}cout << dp[m];return 0;
}

解法2:转为多重背包问题

#include<bits/stdc++.h>
using namespace std;
#define M 205
#define N 35
int dp[M], w[N], c[N], p[N];
int main()
{int n, m;cin >> m >> n;for(int i = 1; i <= n; ++i){cin >> w[i] >> c[i] >> p[i];if(p[i] == 0)//如果第i物品可以取无限个,实际最多可以取m/w[i]个 p[i] = m / w[i];}for(int i = 1; i <= n; ++i)//多重背包 for(int j = m; j >= w[i]; --j)for(int k = 0; k*w[i] <= j && k <= p[i]; ++k)dp[j] = max(dp[j], dp[j-k*w[i]]+k*c[i]);cout << dp[m];return 0;
}

信息学奥赛一本通 1270:【例9.14】混合背包相关推荐

  1. 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02

    /* [例1] 0/1背包<信息学奥赛一本通>[解法一] 02 http://ybt.ssoier.cn:8088/problem_show.php?pid=1267 */ #includ ...

  2. 【例8】合唱队形(《信息学奥赛一本通第五版》)

    /* [例8]合唱队形(<信息学奥赛一本通第五版>) http://ybt.ssoier.cn:8088/problem_show.php?pid=1264 [问题描述] N位同学站成一排 ...

  3. 信息学奥赛一本通 2021:【例4.6】最大公约数

    [题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...

  4. 信息学奥赛一本通(2032:【例4.18】分解质因数)

    2032:[例4.18]分解质因数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 582     通过数: 376 [题目描述] 把一个合数分解成若干个质因数乘积 ...

  5. 信息学奥赛一本通——2062:【例1.3】电影票

    2062:[例1.3]电影票 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 57341     通过数: 34230 [题目描述] 已知一位小朋友的电影票价是10 ...

  6. 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制

    [题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...

  7. 信息学奥赛一本通1267:【例9.11】01背包问题(二维dp与滚动数组优化)

    [题目描述] 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,. ...

  8. 信息学奥赛一本通C++语言-----2036:【例5.3】开关门

    [题目描述] 宾馆里有n(2≤n≤1000)n(2≤n≤1000) 个房间,从1∼n1∼n 编了号.第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是22 的倍数的房间"相反处理& ...

  9. 信息学奥赛一本通——2068:【例2.6】鸡兔同笼

    大家好(๑╹◡╹)ノ" 这里是小蒟蒻 一天没更新了呢! 今天给大家带来<信息学奥赛一本通--2068:[例2.6]鸡兔同笼> 题目: 2068:[例2.6]鸡兔同笼 时间限制: ...

最新文章

  1. 在CentOS 6.9 x86_64的nginx 1.12.2上开启ngx_req_status模块实录
  2. 我一不小心把ubuntu里的ps这样的命令删掉了,应该怎么重装呢
  3. python-作用域
  4. rpc.ratatd安装过程中遇到的问题
  5. android res文件夹下面的 values-v11 、 values-v14
  6. python内置库绘制33角形_33 python format练习题 利用format方法生成一个星号三角形...
  7. windows安装64位Pygame方法
  8. python动态添加类方法_Python 动态添加类方法
  9. 18.模板引擎(2)
  10. 山东省计算机考试无法报名,12月20日开始报名!山东2020年3月全国计算机等级考试注意事项来咯...
  11. linux7配置永久路由,CentOS7添加永久静态路由
  12. 渗透测试工具篇之Metasploit(MSF)扫描模块的简单使用
  13. 总结在mac电脑上安装brew
  14. mysql面试题学校三表查询_mysql经典面试题之学生成绩表
  15. Failed to introspect Class [org.springframework.cloud.gateway.config.GatewayAutoConfiguration$NettyC
  16. 极力推荐的微信小程序,超级实用,一定要收藏
  17. validation 分组校验注解大全及使用详解
  18. 用python生成excel文件_python通过openpyxl生成Excel文件的方法
  19. 1.19.5.4.流上的Join、常规Join、时间区间Join、时态表Join、基于处理时间的时态Join、时态表函数Join、用法
  20. 英文期刊投稿指南模板(通用版)-----以IEEE Wireless Communications为例

热门文章

  1. java url转urf8_UrlEncode编码/UrlDecode解码使用方法
  2. 凌玮科技在创业板上市:市值突破47亿元,综合毛利率下滑
  3. 计算机知识在小学教学中的应用ppt,浅谈PPT课件在小学数学课堂教学中的应用
  4. 在PPT中怎么增加特殊新字体?
  5. Spring+Vue前后端传输图片-简单易上手,copy直接用
  6. 五分钟看懂第一波EOS超级节点投票大战
  7. python计算模型每一次迭代(epoch)的时间,并将其通过pandas模块导出到excel文件
  8. 毕业设计-基于深度学习的肺炎医学 CT 图像分类算法研究
  9. Ubuntu创建和编译文件
  10. 泊松融合vs图像和谐化