【题目链接】

ybt 1272:【例9.16】分组背包

【题目考点】

1. 动态规划:分组背包

【解题思路】

分组背包问题,特点是:每组中的物品最多可以取一件

1. 状态定义

集合:放入背包的物品方案
限制:物品所在分组的区间,背包大小
属性:价值
条件:最大
统计量:价值
状态定义
dp[i][j]: 在前i组物品中选择物品放入大小为j的背包能获得的最大价值。

2. 状态转移方程

记第i组物品有m个,这m个物品的编号为i1,i2,…,im。
第i物品的重量是w[i],价值是c[i]
集合:在前i组物品中选择物品放入大小为j的背包的所有方案
分割集合:第i组物品如何放入背包

  • 如果不选择第i组物品,那么在剩余i-1组中选择物品放入大小为j的背包。dp[i][j] = dp[i-1][j]
  • 如果选择第i组物品中的第1个,该物品下标为i1。那么需要在剩余i-1组中选择物品放入大小为j-w[i1]的背包。dp[i][j] = dp[i-1][j-w[i1]]+c[i1]
  • 如果选择第i组物品中的第2个,该物品下标为i2。那么需要在剩余i-1组中选择物品放入大小为j-w[i2]的背包。dp[i][j] = dp[i-1][j-w[i2]]+c[i2]
  • 如果选择第i组物品中的第m个,该物品下标为im。那么需要在剩余i-1组中选择物品放入大小为j-w[im]的背包。dp[i][j] = dp[i-1][j-w[im]]+c[im]
  • 一般地,如果选择第i组物品中的第k个,该物品下标为x。那么需要在剩余i-1组中选择物品放入大小为j-w[x]的背包。dp[i][j] = dp[i-1][j-w[x]]+c[x]。遍历第i组物品,求选择该组中每个物品后能得到的最大价值dp[i][j]
  • 以上所有情况求最大值。

3. 复杂度分析

背包容量为V,物品总数量为N,分组数量为T。
分组背包一般解法:

  • 时间复杂度: O ( V N ) O(VN) O(VN)
  • 空间复杂度: O ( T V ) O(TV) O(TV)

滚动数组优化后:

  • 空间复杂度: O ( V ) O(V) O(V)

【题解代码】

解法1:分组背包 一般解法

#include<bits/stdc++.h>
using namespace std;
#define V 205
#define N 35
#define T 15
int dp[N][V], w[N], c[N]; //dp[i][j]:在前i组物品中选择物品放入大小为j的背包能获得的最大价值。
vector<int> g[T];//g[i]:存储第i组物品的编号
int main()
{int v, n, t, p;cin >> v >> n >> t;for(int i = 1; i <= n; ++i){cin >> w[i] >> c[i] >> p;g[p].push_back(i);//第p组添加i }for(int i = 1; i <= t; ++i)//遍历各组 {for(int j = 0; j <= v; ++j){dp[i][j] = dp[i-1][j];for(int k = 0; k < g[i].size(); ++k){int x = g[i][k];if(w[x] <= j)dp[i][j] = max(dp[i][j], dp[i-1][j-w[x]]+c[x]);}}}cout << dp[t][v];return 0;
}

解法2:分组背包 滚动数组优化

#include<bits/stdc++.h>
using namespace std;
#define V 205
#define N 35
#define T 15
int dp[V], w[N], c[N]; //dp[i][j]:(第1维被优化掉)在前i组物品中选择物品放入大小为j的背包能获得的最大价值。
vector<int> g[T];//g[i]:存储第i组物品的编号
int main()
{int v, n, t, p;cin >> v >> n >> t;for(int i = 1; i <= n; ++i){cin >> w[i] >> c[i] >> p;g[p].push_back(i);//第p组添加i }for(int i = 1; i <= t; ++i)//遍历各组 {for(int j = v; j >= 0; --j){for(int k = 0; k < g[i].size(); ++k){int x = g[i][k];if(j >= w[x])dp[j] = max(dp[j], dp[j-w[x]]+c[x]);}}}cout << dp[v];return 0;
}

信息学奥赛一本通 1272:【例9.16】分组背包相关推荐

  1. 信息学奥赛一本通1272【例9.16】分组背包

    题目描述] 一个旅行者有一个最多能装V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn.这些物品被划分为若干组,每组中的物品互相冲突,最多 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 浅析利用MetaWeblog接口同步多个博客
  2. 服务器实际显示内存,服务器实际显示内存
  3. 多媒体计算机技术的主要特点,多媒体技术主要特点?
  4. 计算机视觉基础---OpenCV框架与图像插值算法(图像伸缩)cpp+python
  5. Win10鼠标右键菜单不显示怎么办?
  6. 电影台词搜索引擎,英语学习和视频创作的必备神器
  7. 四阶龙格库塔法的基本思想_利用龙格库塔法求解质点运动方程
  8. 联想电脑尺寸在哪里看_联想电脑型号怎么查看【详细介绍】
  9. 微信集成(帆软报表)
  10. 芯准TTE“宏时隙“调度机制 ——基本原理
  11. 解决https JDK导入安全证书
  12. Div Scroll Bar (用层模拟滚动条)
  13. mysql积累--索引
  14. Java-11-访问字符串中字符与字符串长度
  15. 我们要做杨百万,不做杨白劳
  16. BZOJ4180: 字符串计数 SAM+矩阵乘法
  17. 华为云之docker技术实现LNMP容器化—nginx配置文件
  18. adb devices后显示List of devices attached/unauthorized问题解决
  19. 新南威语言班C加,2020年新南威尔士大学语言班要求高不高
  20. TIA PORTAL S7-1200如何使用博途的仿真功能PLCSIM?

热门文章

  1. 阿里云服务器无法访问解决方案
  2. 【华人学者风采】刘维民 中国科学院
  3. 期货投资交易8个技巧
  4. java下载文件下载不动_java文件下载的问题
  5. 中小中介公司,如何应对链家推出的贝壳找房那种VR看房模式
  6. dede简略标题调用标签
  7. Excel 如何把一列数据直接粘贴到筛选后的表格中
  8. Opencv读取视频帧率
  9. 华为云配置、TortoiseGit
  10. 创造发挥能力的魔幻空间