1、问题描述:

2、解决思路


(1)思路:一般动态规划问题难就难在思路难以理解,一旦思路理解了代码非常好写,一般的动态规划题目我们可以分成两部分思考,一是问题的每一种状态如何表示,另一部分是如何从一个状态转移到另一个状态,也就是列出状态转移方程。

(2)状态转移方程:

当第i组物品选0个也就是一个都不选的时候,其实就与从前i-1组物品选,且总体积不大于j的最大价值等价;
而当从第i组选择第k个物品时,可以由在前i-1组物品里选,总体积不大于j减去第i组的第k个物品的体积的最大价值再加上第i组的第k个物品的价值得到。

故可以得到状态转移方程为:

3、代码

//1、朴素动态规划做法
#include<iostream>
#include<algorithm>
using namespace std;
const int N=110;
//f[i][j]表示从前i组物品选体积不大于j的最大价值
//s[i]表示第i组物品数量,v[i][k]、w[i][k]分别表示第i组第k个物品体积和价值
int f[N][N],v[N][N],w[N][N],s[N],n,m;int main()
{scanf("%d%d",&n,&m);//输入物品组数n、背包体积mfor(int i=1;i<=n;i++){scanf("%d",&s[i]);//输入该组物品数量for(int j=1;j<=s[i];j++){scanf("%d%d",&v[i][j],&w[i][j]);//输入该组每个物品的体积和价值}}for(int i=1;i<=n;i++)//遍历前i组物品for(int j=0;j<=m;j++)//体积从0开始遍历{f[i][j]=f[i-1][j];//记录不选第i组物品且体积不大于j的最大价值for(int k=1;k<=s[i];k++)//依次遍历第i组物品选哪一个if(j>=v[i][k])f[i][j]=max(f[i][j],f[i-1][j-v[i][k]]+w[i][k]);}printf("%d\n",f[n][m]);return 0;
}

4、时\空复杂度分析

(1)时间复杂度:
三重循环,故时间复杂度为:
其中n表示物品组数,V表示背包体积,S表示每组物品的数量。
(2)空间复杂度:
用二维数组存每个物品的体积和价值,故空间复杂度为:

分组背包问题(动态规划法)相关推荐

  1. 【分组背包问题 (HDU 3535 )】

    用到至少选择一个,所以没有空间优化 分组背包问题: 常见的三种分组问题: 分成K组: 1.每组最多只能取一件物品 一维数组伪码: for 0 to K  对每一组进行     for W to 0   ...

  2. 九大背包问题专题--分组背包问题

    6.分组背包问题 问题: 有N组物品和一个容量是V的背包. 第组物品有若干个,同一组内的物品最多只能选一个每件物品的体积是vij,价值是wij.其中i是组号,j是组内编号. 求解将哪些物品装入背包,可 ...

  3. 基础算法--背包问题(01背包问题、完全背包问题、多重背包问题、分组背包问题)

    文章目录 前言 01背包问题 完全背包问题 多重背包问题 分组背包问题 前言 背包问题:给我们 i 件物品,每件物品都有体积 vi 和权重 wi ,给我们限制条件,让我们选择在背包的容量内,物品达到权 ...

  4. 01背包问题,多重背包问题-分组背包问题-完全背包问题-总结-内含4种经典背包问题

    01背包问题: 例题:传送门 01背包问题的特点:背包容量有限,物品只有一个,具有确定的体积和价值,我们的目标就是在不超过背包最大体积的情况下装入价值尽可能大的物品,让我们输出最大总价值 对于背包问题 ...

  5. 487 金明的预算方案(分组背包问题扩展)

    1. 问题描述: 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超 ...

  6. [AcWing] 9. 分组背包问题(C++实现)分组背包问题模板题

    [AcWing] 9. 分组背包问题(C++实现)分组背包问题模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 ...

  7. 动规之-分组背包问题

    题目描述 自 01 背包问世之后,小 A 对此深感兴趣.一天,小 A 去远游,却发现他的背包不同于 01 背包,他的物品大致可分为 k 组,每组中的物品相互冲突,现在,他想知道最大的利用价值是多少. ...

  8. acwing算法题--分组背包问题

    原文链接:https://www.acwing.com/problem/content/9/ #include <iostream>using namespace std;const in ...

  9. AcWing 9. 分组背包问题(分组背包模板)

    题目连接 https://www.acwing.com/problem/content/description/9/ 思路 对于一个组里面的物品只能选一个我们可以通过集合划分的方式来看待这个问题,f[ ...

最新文章

  1. C语言基本数据结构之三(图的广度及深度遍历,求单源最短路径的Dijkstra算法)
  2. 编程学习初体验(4. 编程的核心)
  3. mysql -- 学习记录
  4. 伪共享(False Sharing)
  5. python app mysql_Python 操作 MySQL 的5种方式
  6. python中tf.abs_python – Tensorflow:替换tf.nn.rnn_cell._linear(输入,大小,0,范围)
  7. 十进制到二进制的转换
  8. c++ 11 中for循环新增的用法(基于范围的for循环)
  9. flask实现浏览器实时视频播放
  10. Flutter系列(二)flutter项目打安装包
  11. windows命令强制关闭登录用户
  12. mysql数据库 数据查询闯关(头哥)
  13. log4j和slf4j的区别
  14. 【GZH逸佳君】:送你300集基础AI教程+6套高级设计教程+20G素材,学会就能做设计
  15. 每个工程师都应该知道的 5 个射频发射器测量指标(自NI官网翻译)
  16. HASH和HMAC(3):SHA-1算法原理
  17. Vue前端如何与后端进行数据交互
  18. 机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾
  19. C# Windows桌面应用 ---- 实例:文件读写
  20. Linux从入门到放弃

热门文章

  1. [自学CV]000-计算机视觉学习路线
  2. ggplot之箱线图
  3. run php helper,PHP异步进程助手async-helper
  4. iis7 php 5.4,laravel 5.4如何在iis 7环境中安装
  5. 自助互阅php,网站互阅有用吗? - 搜外SEO问答
  6. 12C ORA-错误汇总6 ORA-07500 to ORA-09859
  7. 【shell】shell脚本实战-awk基本介绍
  8. weblogic12c集群搭建
  9. 零基础上手的简道云「订单管理系统」,不止搞定进销存!
  10. net中c#如何录制音频?推荐使用NAudio组件