//16.2-2 动态规划算法求解0-1背包问题#include <iostream>
using namespace std;#define W 50
#define N 3
int v[N+1]={0,60,100,120};//物品价值
int w[N+1]={0,10,20,30};//物品重量
int c[N+1][W+1]={0};//c[i][j]表示在剩余容量为j的情况下,对于物品1.....i所能达到的最大价值
int x[N+1]={0};void Dynamic_Knapsack(int v[],int w[],int n,int weight)//求解最大价值
{for(int j=0;j<=weight;++j)//c[0][j]=0;for(int i=1;i<=n;++i){c[i][0]=0;for(int j=1;j<=weight;++j){if(w[i]<=j)//当还有还有剩余容量时{if(v[i]+c[i-1][j-w[i]]>c[i-1][j])//此时选择装入物品ic[i][j]=v[i]+c[i-1][j-w[i]];else//不装入物品ic[i][j]=c[i-1][j];}elsec[i][j]=c[i-1][j];}}
}
void TraceBack(int c[][W+1],int w[],int weight,int n,int x[])//选择被选中的物品
{for(int i=n;i>=1;--i){if(c[i][weight]==c[i-1][weight])//物品i未被选中{x[i]=0;}else//物品i被选中{x[i]=1;weight=weight-w[i];}}
}void main()
{Dynamic_Knapsack(v,w,N,W);cout<<"The largest value is "<<c[N][W]<<endl;TraceBack(c,w,W,N,x);for(int i=1;i<=N;i++){if(x[i]==1)cout<<"Item "<<i<<" is selected!"<<endl;}cout<<endl;
}

算法导论答案 16.2-2 0-1背包问题的动态规划算法相关推荐

  1. 动态规划之0/1背包问题(动态规划入门)

    动态规划很早以前就接触过但是因为太晦涩难懂一下子到现在才开始真正的学习到其中的道理,0/1背包问题是动态规划的入门类问题 比较好理解 首先我们要知道动态规划是用于解决最优解的问题 它是一种思想而不是一 ...

  2. 算法导论第16章练习题 16.1-4

    16.1-4 假设有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行.我们希望使用最少的教室来完成活动.设计一个高效的贪心算法,求每个活动应该在哪个教室来进行. (这个问题也被称为 ...

  3. 总结——01背包问题 (动态规划算法)

    0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi . 问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? 分析一波,面对每个物品,我 ...

  4. 01背包问题的动态规划算法、蛮力法和空间优化算法

    算法思想: (1).动态规划算法:解决背包物品价值最大化问题的最优解,是建立在每一个子问题的最优解的前提下完成的.设Value[i,j]表示的是i个物品放进背包容量为j的背包的价值,令i从0增至n(物 ...

  5. 动态规划算法实验报告_搞懂这几点,动态规划算法就是那么简单

    动态规划(Dynamic programming,简称DP),是大家都觉得比较难以掌握的算法.为了应付面试,我们经常会背诵一下斐波那楔数列或者背包问题的源码,其实,只要理解了思想,掌握基本的模型,然后 ...

  6. [算法导论]练习16.1-4 活动教室分配(区间着色问题)

    转载请注明原创:http://www.cnblogs.com/StartoverX/p/4608412.html 题目: 有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行.我们希 ...

  7. 算法导论答案 第11章:散列表

    11.1 直接寻址表 11.1-1 findmax(T,m) {max=T[0];for i=1 to m-1{if T[i]!=NIL && T[i]>maxmax=T[i]} ...

  8. 算法导论答案 第10章:基本数据结构

    10.1 栈和队列 10.1-2 从数组的两端向数组的中间插入元素.数组的两端相当于2个栈的栈顶. 10.1-4 ENQUEUE(Q,x) {if head[Q]=(tail[Q]+1)%length ...

  9. 算法导论答案 思考题15-1 双欧几里德旅行商问题

    解题思路: 根据简化后的双调欧几里得旅行问题的性质,将点集依据各点x坐标单调递增来进行编号,我们设b[i,j]是最短双调闭合旅程P(i,j)的长度(i<=j),而最短双条闭合旅程P(i,j)是指 ...

  10. 算法导论 10.1-6

    题目:用两个栈实现一个队列,并分析相关队列操作的运行时间 解答: 1.使用两个栈S1与S2: 2.通过栈S1的Push执行队列入队操作,通过栈S2的Pop执行队列出队操作 3.当栈S2为空后,即S1- ...

最新文章

  1. java Executor实例_Executor框架+实例
  2. 《代码本色》作者Daniel Shiffman:艺术家也编程
  3. C语言学习,关于fflush 和setvbuf
  4. window. onload=function(){} 与 $(function(){}) 的区别
  5. LA 5842 Equipment (状态压缩+dp)
  6. JavaSE基础_java简介和环境搭建_2
  7. 总结_____大二上
  8. mysql cast类型转换
  9. 写博文有助于提高编程能力,因为写文章比写代码难多了
  10. MD5加密----------
  11. 线性代数之 矩阵的迹
  12. 大数据开发工程师招聘要求高吗?
  13. 【Python】爬虫入门级实战讲解:爬取商城的商品名称及价格
  14. c语言怎么表示字节集,用易语言写一个电子钢琴软件
  15. 如何查看别人的微信公众号的粉丝数
  16. 计算机中c语言的应用特点,计算机中C语言的应用特点分析
  17. 手把手教你用 Python 下载手机小视频
  18. 一盆惨遭毒手的肉——记,那一次和小鲜肉的邂逅
  19. BIO和NIO消耗的cpu和内存比较
  20. 计算机组成与设计:硬件/软件接口

热门文章

  1. 行政区划编码转换区域名工具类
  2. XJad(Java反编译工具)v2.2绿色版
  3. 基于贝叶斯网络模型的自适应测评
  4. 线性调频信号与脉冲压缩
  5. HTTP文件下载原理
  6. bim计算机管理室内设计,BIM室内设计分析
  7. 002 如何将电子版一寸照以照片的方式打印出来
  8. 查询开户银行的现代化支付行号
  9. SMS模型格网转换为MIKE21的格网源代码
  10. 搜电影和网盘资源网站