动态规划 01 背包问题

关键代码

for (int i = 1; i <= n; ++i){for (int j = 0; j <= c; ++j){if (j < w[i])  //如果背包剩余重量小于物品重量则该物品放不下M[i][j] = M[i - 1][j];elseM[i][j] = max(M[i - 1][j], M[i - 1][j - w[i]] + v[i]);  //判断该物品装进去是不是满足最优解}}

判断是否在背包中

//用于从定向下判断装入背包的东西for (int i = n; i >= 0; --i){if (M[i][j] > M[i - 1][j]){x[i] = 1;j -= w[i];}elsex[i] = 0;}

源码如下:

#include<iostream>using namespace std;
int M[100][100];int max(int a, int b)
{if (a > b)return a;elsereturn b;
}
int dp(int n, int c, int *v, int *w, int *x)
{for (int i = 0; i < n; ++i)M[i][0] = 0;for (int j = 0; j < c; ++j) //物品重量M[0][j] = 0;for (int i = 1; i <= n; ++i){for (int j = 0; j <= c; ++j){if (j < w[i])M[i][j] = M[i - 1][j];elseM[i][j] = max(M[i - 1][j], M[i - 1][j - w[i]] + v[i]);}}int j = c;//用于从定向下判断装入背包的东西for (int i = n; i >= 0; --i){if (M[i][j] > M[i - 1][j]){x[i] = 1;j -= w[i];}elsex[i] = 0;}cout<<"选中的物品是:";for (int i = 1; i <= n; i++){if (x[i] == 1){cout<<i;}}cout<<endl;return M[n][c];   //返回背包中的总价值}
int main()
{int n,c;  // n为物品数量 ,c为背包容量int w[10];  // 保存每个物品的重量int v[10];  //保存每个物品的价值int x[10] = { 0 };   //保存该物品是否装进背包中cout << "请输入物品数量、背包大小" << endl;cin >> n >> c;cout << "请输入物品重量" << endl;for (int i = 1; i <= n; ++i)cin >> w[i];cout << "请输入物品价格" << endl;for (int i = 1; i <= n; ++i)cin >> v[i];int s = dp(n, c, v, w, x);cout << s;system("pause");return 0;
}

01背包问题—动态规划求解相关推荐

  1. 01背包问题 动态规划求解方法 动态方程的详细解释 能理解的解释(附python代码)

    01背包问题属于组合优化问题:假设你要出门旅游,你现在有一个书包,这个书包的容量(capacity)有限,有很多物品如牙刷.防晒霜.雨伞.水杯等等,但书包装不下所有物品,因此我们必须有所取舍.那么通常 ...

  2. 01背包问题 动态规划 java实现 简单通俗易懂

    ** 01背包问题 动态规划 ** 1.动态规划 什么是动态规划?动态规划就是将一个大问题不断向下拆分成小问题,直到拆分出的小问题可以求出其解,然后将小问题的解不断的向上合并,最终得到大问题的解决方案 ...

  3. 01背包问题动态规划(二维数组)

    01背包问题动态规划(二维数组) 问题描述 ​ 一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,-,Wn,它们的价值分别为C1,C2,-,Cn,求旅行者能获得 ...

  4. 0-1背包问题动态规划模型的Python解法

    0-1背包问题动态规划模型的Python解法 1.01背包问题 2.Python解决方案 3.01背包问题例题 1.01背包问题 背包问题(Knapsack problem)是一种组合优化的NP完全问 ...

  5. 背包问题动态规划matlab,01背包问题动态规划详解

    计算机算法分析考试:动态规划0-1背包问题,怎么算她说她没醉,却一直摇摇晃晃掉眼泪:你说你爱她,却从未想过给她一个家. 要考试了,老师给划重点有一题:动态规划0-1背包问题,怎么算. 怎么理问题描述: ...

  6. 【转】01背包问题动态规划详解

    转载自 sunstar1989 最终编辑 中华复生母 动态规划是用空间换时间的一种方法的抽象.其关键是发现子问题和记录其结果.然后利用这些结果减轻运算量. 比如01背包问题. 因为背包最大容量M未知. ...

  7. 01背包问题——动态规划详解

    有N件物品和⼀个最多能被重量为W的背包.第i件物品的重量是weight[i],得到的价值是value[i].每件物品只能⽤⼀次,求解将哪些物品装入背包⾥物品价值总和最⼤. 在题目中我们假设有三件物品 ...

  8. 0-1背包问题 动态规划java_C#使用动态规划解决0-1背包问题实例分析

    // 利用动态规划解决0-1背包问题 using System; using System.Collections.Generic; using System.Linq; using System.T ...

  9. 算法设计与分析 0-1背包问题 动态规划解法【超详细】

    0-1背包问题 问题描述 给定i个物品和一个容量为的背包,物品的重量是Wi,其价值为Vi 物品个数为i,背包容量为C. 如何选择装入背包内的物品,使得装入背包中的物品的总价值最大? 其中,每种物品只有 ...

最新文章

  1. 机器学习笔记(六)支持向量机
  2. 20170804 - 今日技能封装 - Q
  3. 【深度学习】解决物体检测中的小目标问题
  4. Mask R-CNN详解和安装
  5. Qt中为自己的程序建立一个消息循环
  6. windows linux cpu 抢占式 时间片_嵌入式Linux中进程调度怎样来解析
  7. reddit_我在3天内疯狂地审查了Reddit上的50个投资组合,从中学到了什么。
  8. python的urllib2模块
  9. for、while、do while 3种循环异同点
  10. 有助提高效率的Web前端开发框架有哪些?
  11. 读书笔记-《人为什么活着》
  12. 基于深度极限学习机DELM的分类
  13. 「Injective衍生品市场创意大赛」角逐“最强王者”,就等你来
  14. 加州大学戴维斯计算机博士生,2020年加州大学戴维斯分校博士读几年
  15. 用html画动漫人物,画动漫人物的步骤?
  16. ubuntu alise设置
  17. 手势控制鼠标的操作(不指屏幕实现简单触屏)
  18. 使用 docker 对容器资源进行限制
  19. python刷视频挣钱_薅羊毛--使用python+adb实现自动刷视频点赞
  20. 10+编程语言实现云笔记

热门文章

  1. 为了测试自动驾驶,福特将车带到了一个仿造城市
  2. SilverLight 初探一
  3. Linux远程桌面工具Xming+Putty的搭建
  4. 把别人的Tcl/Tk代码加入到Go语言里2 矩形
  5. 使用镜像数据库减轻报表的负载
  6. RTOS原理与实现02:基本任务切换实现
  7. this调用语句必须是构造函数中的第一个可执行语句_详解-JavaScript 的 this 指向和绑定...
  8. Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
  9. Do Now 一个让你静心学习的APP——团队博客
  10. IDEA进行远程调试