动态规划之01背包问题

  • 1. 问题描述
  • 2. 输入格式
  • 3. 输出格式
  • 4. 输入样例
  • 5. 输出样例
  • 6. 问题分析
  • 7. 代码实现
  • 8. 执行结果

1. 问题描述

有 n 种物品和一个容量是 y 的背包,每种物品只有一件。

第 i 种物品的体积是 wi,价值是 vi。

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


2. 输入格式

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

接下来有 N 行,每行两个整数wi,vi,用逗号隔开,分别表示第 i 种物品的体积和价值。


3. 输出格式

输出最大价值,物品序列号。


4. 输入样例

3,10
5,8
8,20
4,17

5. 输出样例

最大价值:25
物品序号:3号 1号

6. 问题分析




7. 代码实现

#include <iostream>
#include <bits/stdc++.h>
using namespace std;typedef struct {int w;int v;
}Object;int main(){int n,y;char ch;cin>>n>>ch>>y;Object ob[n+1];for(int i=1;i<=n;++i)cin>>ob[i].w>>ch>>ob[i].v;//ob[0]未使用int arr[n+1][y+1];for(int i=0;i<y+1;++i)arr[0][i] = 0;for(int i=0;i<n+1;++i)arr[i][0] = 0;for(int i=1;i<n+1;++i)for(int j=1;j<y+1;++j){arr[i][j] = arr[i-1][j];if(ob[i].w <= j)arr[i][j] = max(arr[i-1][j],arr[i-1][j-ob[i].w]+ob[i].v);}vector <int> r;int j = y;for(int i=n;i>0;--i)if (arr[i][j] != arr[i-1][j]){r.push_back(i);j = j - ob[i].w;}cout<<"最大价值:"<<arr[n][y]<<endl<<"物品序号:";for(vector<int>::iterator it = r.begin();it!=r.end();++it)cout<<*it<<"号 ";return 0;
}

8. 执行结果

10,30
2,3
5,6
8,6
10,12
6,7
9,11
4,7
6,8
7,8
5,8
最大价值:41
物品序号:10号 7号 6号 4号 1号
Process returned 0 (0x0)   execution time : 1.365 s
Press any key to continue.

——————END-2022-04-23——————
———————感谢您的阅读—————————

动态规划01背包问题求解(附c/cpp代码)相关推荐

  1. 动态规划-----------01背包,完全背包与多重背包

    P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...

  2. 算法分析-动态规划-01背包

    在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2--Wn,与之相对应的价值为P1,P2--Pn.求出获得最大价值的方案. 注意:在本题中,所有的体积值均为整数.01的意思是,每个物 ...

  3. 动态规划——01背包

    动态规划--01背包 1. 经典"01背包" 2. "01背包"方法归纳 3. 实战 3.1 分割等和子集 3.2 最后一块石头的重量 II 3.3 目标和 3 ...

  4. 动态规划—0-1背包

    动态规划有以下三个特点: 1:多阶段决策 2:最优值和最优解 3:最优子结构 动态规划采用自底而上的思想保存子问题值,避免重复计算.例如斐波那契数列的递归函数,f(5)=f(3)+f(4),而f(4) ...

  5. 动态规划01背包算法详解

    动态规划算法核心思想: 将大的问题转化为小问题进行解决. 01背包问题: 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的重量为W1,W2至Wn,与之相对应的价值为V1V2至Vn.01背 ...

  6. c++ 动态规划-01背包

    动态规划 - 01背包问题 1.使用递归遍历(穷举)求解: 01背包问题:给定 n 种物品和一个重量(容量)(限定条件)为 w 的背包,物品 i 的重量是 wi,其价值为 vi.(每种物品只有一个)问 ...

  7. python动态规划01背包_01背包问题(动态规划)python实现

    在01背包问题中,在选择是否要把一个物品加到背包中.必须把该物品加进去的子问题的解与不取该物品的子问题的解进行比較,这样的方式形成的问题导致了很多重叠子问题,使用动态规划来解决.n=5是物品的数量,c ...

  8. c语言动态规划0-1背包,c++实现0-1背包问题完整源码(动态规划实现)

    #include #define MAX_NUM 5 #define MAX_WEIGHT 10 using namespace std; //动态规划求解 int zero_one_pack(int ...

  9. 开心的小明 (NYOJ49) [动态规划.01背包]

    开心的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他 ...

最新文章

  1. OpenCV 绘制几何图形
  2. JavaScript绑定键盘事件的多种写法
  3. vb.net 机器学习-候选消除法
  4. 经典排序算法(4)——折半插入排序算法详解
  5. docker es持久化_Docker 搭建 ES 集群并整合 Spring Boot
  6. java oop入门_java入门(十六) | OOP(三)之构造方法
  7. Redhat enterprise linux下安装rlwrap工具
  8. Python获取每个用户使用的CPU和内存百分比
  9. dubbo源码1-暴露服务
  10. HDU3501——欧拉函数裸题
  11. 深入浅出谈SCADA
  12. 真正实现再wine上安装VC6.0,并编译调试程序
  13. 视频营销自动赚钱秘诀
  14. 计算理论基础 第2版 Harry R. Lewis 第1章
  15. freemaker使用三目表达式
  16. 阿里巴巴线上面试总结
  17. 局域网内查询嵌入式设备IP的几种方式
  18. VBA:MsgBox函数
  19. 非CS背景,如何快速上手机器学习?
  20. BUI Webapp 入门教程

热门文章

  1. 「蓝桥杯」完全平方数(Java)
  2. THINKPHP 5.0.7 开启多语言模式
  3. 湖南2020年计算机等级考试报名时间,湖南2020年3月计算机等级考试报名时间
  4. 对抽象函数求导_抽象函数的求导方法怎么?
  5. 基于图像处理的户型图识别
  6. ubuntu把终端信息输出到文本文件中的方法
  7. 《致加西亚的信》一书中的一个隐蔽错误
  8. 初入博客,请多多指教
  9. 【JVM和性能优化】2.垃圾回收器和内存分配策略
  10. Android面试题——kotlin相关面试题