#include<iostream>
#include<iomanip>
using namespace std;
//前i个物品装入容量为j的背包中获得的最大价值//0-1背包动态规划算法   构造二维表
int  knapsack_problem( int n,int *weight,int *value,int capacity,int **m,int *flag)
{for(int i=0;i<=capacity;i++)//赋值第一行 为0 {m[0][i]=0;// 初始化:背包容量为0时,前i个物品无法装入,获得最大价值为0}for(int i=0;i<=n;i++)//第一列赋值为0 {m[i][0]=0;//初始化:物品数量为0时,背包容量j无论多大,获得最大价值为0} for(int i=1;i<=n;i++) //构造二维表:行对应前i个物品;列对应背包容量j{for(int j=1;j<=capacity;j++){if(j<weight[i])      //背包容量不够第i个物品的重量大{m[i][j]=m[i-1][j]; //不装,获得的最大价值仍然等于前i-1个物品装入情况的}else{ //装,看看是装入后获得的最大价值大还是前i-1个物品装入情况的最大价值大,比较后选择最大的m[i][j]=max(m[i-1][j],m[i-1][j-weight[i]]+value[i]);}}} //标记那个物品最终放到了背包里了吗 int temp_capacity=capacity;//于背包的最大容量C for(int i=n;i>0;i--)//从后往前遍历,如果装了第i个物品则标志位x[i]=1{if(m[i][temp_capacity]>m[i-1][temp_capacity])//判断第i个物品有没有装进去{flag[i]=1;   //第i个物品装了进去temp_capacity=temp_capacity-weight[i];//装了进去就将该物品的重量减去,j为剩余容量}else{flag[i]=0;//第i个物品没装进去}}cout << "选中的物品是:";for(int i=1;i<=n;i++){cout<<flag[i]<<" ";}cout<<endl;return m[n][capacity];}
int main()
{int n,capacity;cout<<"请输入背包的最大容量:";cin>>capacity;cout<<"请输入物品的总数:";cin>>n;int weight[n+1],value[n+1];cout<<"请输入物品的重量:";for(int i=1;i<=n;i++){cin>>weight[i];}cout<<"请输入物品的价值:";for(int i=1;i<=n;i++){cin>>value[i];}int **m=new int *[n+1];//开辟行 for(int i=0;i<=n;i++){m[i]=new int [capacity+1];//开辟列 }int flag[n+1];cout<< "获得的最大价值为:"<<knapsack_problem(n,weight,value,capacity,m,flag)<<endl;for(int i=1;i<=n;i++){for(int j=1;j<=capacity;j++){cout<<setw(4)<<m[i][j]<<" ";}cout<<endl;}}

算法设计与分析——动态规划——01背包问题相关推荐

  1. 算法设计与分析-----动态规划

    算法设计与分析-----动态规划(c语言) 一.动态规划 1.定义 2.动态规划问题的解法 3.动态规划求解的基本步骤 4.动态规划与其他方法的比较 5.求解整数拆分问题 6.求解最大连续子序列和问题 ...

  2. 算法设计与分析——动态规划(二):钢条切割

    分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...

  3. 算法设计与分析——动态规划(五):最长公共子序列

    分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...

  4. 计算机算法设计与分析 动态规划 实验报告,动态规划法解最长公共子序列(计算机算法设计与分析实验报告).doc...

    动态规划法解最长公共子序列(计算机算法设计与分析实验报告) 实报 告 实验名称:任课教师::姓 名:完成日期:二.主要实验内容及要求: 要求按动态规划法原理求解问题: 要求交互输入两个序列数据: 要求 ...

  5. 算法设计与分析—动态规划算法

    动态规划算法 1.动态规划算法基本思想 2.动态规划算法求解步骤 3. 0-1背包问题 在现实生活中,存在这样一类问题,它们的活动过程不仅可以分成若干阶段,而且在任意一个阶段(不妨设为第i个阶段)以后 ...

  6. 算法设计与分析——动态规划(一)矩阵连乘

    动态规划--Dynamic programming,可以说是本人一直没有啃下的骨头,这次我就得好好来学学Dynamic programming. OK,出发! 动态规划通常是分治算法的一种特殊情况,它 ...

  7. 算法设计与分析—动态规划

    动态规划 首先将计算机问题分解为规模较小的子问题,然后自底向上地求解各个子问题,并将子问题的解存储在一个数据结构中. 优化子结构 重叠子问题 问题实例 (1)0-1背包问题 一个容量为C的背包和n个物 ...

  8. 算法设计与分析——动态规划——数字三角形问题

    数字三角形问题 1.题目描述:给定一个由n行数字组成的数字三角形,如图3-7所示.设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 算法设计:对于给定的由n行数字组成的数字 ...

  9. 算法设计与分析:多重背包问题

    0-1背包问题描述 给定n个物体(它们的重量为:w1,w2,-,wn,价值为:v1,v2,-,vn) 和 一个承受重量为W的背包,问怎么选取这些物体,放在背包中(不超过背包的承重),让所取的子集达到最 ...

最新文章

  1. Blender程序性纹理学习教程大师班 Creative Shrimp – Procedural Texturing Blender Master Class
  2. \\s+ split替换
  3. 源同步方法与注意事项
  4. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(2)
  5. oracle中如何移动数据文件
  6. 并发学习笔记 (5)
  7. 如何开始 java core java
  8. linux c 贝塞尔曲线_使用 logzero 在 Python 中进行简单日志记录 | Linux 中国
  9. 大数据中心周边辐射大吗_“一部手机读云南”上线 力争建成国家方志大数据中心西南中心...
  10. hutol json null值没了_详解Java去除json数据中的null空值问题
  11. AWS 之于 K8s,如同 Windows 之于 Linux!
  12. Layui form 表单验证 基本属性
  13. linux目录存 xml文件,将IDEA maven项目中src源代码下的xml等资源文件编译进classes文件夹...
  14. Moq 和 RhinoMocks
  15. Matlab 答题卡方案
  16. 逆向之汇编(堆栈平衡函数)
  17. GMail为什么可以屹立不倒?
  18. 联通云OSS上传文件
  19. Pytorch官网一直很卡进不去,离线下载pytorch各类版本安装包方法
  20. 原装Win8系统换win7系统(图文教程)

热门文章

  1. linux下常见生产脚本,不看后悔的Linux生产服务器Shell脚本分享(2)
  2. CSDN博客文章阅读模式插件(附源码)
  3. LeetCode之Count and Say
  4. Android之让图片匀速旋转效果
  5. 公司c语言面试题目,c语言面试最必考的十道试题,求职必看!!!
  6. python里split_python中split()的用法
  7. 移动端 登陆 模板 html_聚会邀请函请柬模板 免费设计制作生成
  8. 没有什么是日本牛郎店做不到的......
  9. 全网爆红!全新洗脑神曲:程序员Disco
  10. 福利来袭,送你105例C语言实战