0-1背包问题,是说给定 n 个物体,每个物体都有一定的重量和价值,再给一个能容纳最大重量为 w 的背包。求从 n 个物体中选出若干个放到背包中,在所选物体总重量不超过 w 的情况下,所选物体的总价值最大。

注意:所有物体都不可分割。

分析:这个问题可抽象为给定两个数组 wt[0..n-1] 和 val[0..n-1],第一个数组表示各物体的重量,第二个数组表示各物体的价值。从 wt 数组中选出若干个元素,它们的总重复不超过 w,而且总价值最大。

这是动态规划里的一个经典问题

1.最优子结构性质

在所有的组合中,对任一给定的物体,它要在么在一个组合里面,要么不在这个组合里面。所以最大价值可这样选择:

1)不包括第 n 个物体,只从剩余的 n-1 个物体中选择;

2)包括第 n 个物体,剩余的重量 W-wt[n-1] 要从剩余的 n-1 个物体中选择。

如果第 n 个物体重量超过 W,那么就只能选第一种情况,由此得到下面的递归程序

#include<stdio.h>// A utility function that returns maximum of two integers
int max(int a, int b) { return (a > b)? a : b; }// Returns the maximum value that can be put in a knapsack of capacity W
int knapSack(int W, int wt[], int val[], int n)
{// Base Caseif (n == 0 || W == 0)

Knapsack Problem(0-1背包问题)相关推荐

  1. Dynamic Programming 01 —knapsack problem(动态规划背包问题)

    首先引入动态变化的含义:为什么要有动态规划? Introduction: 从斐波那契函数的递归中我们发现,在例子求fib(7)的过程中,我们需求得fib(5)和fib(6),而我们在求fib(6)的时 ...

  2. 动态规划法(四)0-1背包问题(0-1 Knapsack Problem)

      继续讲故事~~   转眼我们的主人公丁丁就要离开自己的家乡,去大城市见世面了.这天晚上,妈妈正在耐心地帮丁丁收拾行李.家里有个最大能承受20kg的袋子,可是妈妈却有很多东西想装袋子里,已知行李的编 ...

  3. C#,背包问题(Knapsack Problem)贪心算法的源代码

    背包问题(KnapSack Problem)的相关算法是常用的规划算法. 一.什么是背包问题? 背包的问题是,你有一个"袋子",可以装有限数量的物品,鉴于你有一组物品可以从每个物品 ...

  4. JavaScript实现Knapsack problem背包问题算法(附完整源码)

    JavaScript实现Knapsack problem背包问题算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 MergeSort.js完整源代码 Knapsack ...

  5. [Algorithmic Toolbox学习笔记][week6]0/1 Knapsack Problem

    问题描述 具体的问题描述请参考以下链接: [Algorithmic Toolbox学习笔记][week3]战利品的最大价值_Karen_AMPM的博客-CSDN博客假设小偷有一个背包只能放下一定重量的 ...

  6. Python多维约束(重量+体积+次数)背包问题(Knapsack Problem)

    问题描述:1.一个背包,往里装东西,物品重量w(weight)对应为[2,3,4,7] ,价值va(value)对应为[1,4,7,12] ,如果你的最大承重为20,每个物品可装次数不限,求你能装入背 ...

  7. Knapsack Problem

    背包九讲 0-1 knapsack problem 01背包-牛客网 已知一个背包最多能容纳体积之和为V的物品,现有 n 个物品,第 i 个物品的体积为 vi , 重量为 wi,求当前背包最多能装多大 ...

  8. 算法设计与分析实验二:动态规划法实现TSP问题和0/1背包问题

    [实验目的] 1.熟练掌握动态规划思想及教材中相关经典算法. 2.使用动态规划法编程,求解0/1背包问题和TSP问题. TSP问题 一.实验内容: TSP问题是指旅行家要旅行n个城市,要求每个城市经历 ...

  9. 0/1背包问题---C++动态规划法

    [问题] 给定n种物品和一个背包,物品i(1≤i≤n)的重量是,其价值为,背包容量为,对于每种物品只有两种选择:装入背包或者不装入背包.如何选择装入背包的物品,使得装入背包中物品的总价值最大? [想法 ...

  10. C语言动态规划法解决0/1背包问题(详细解答)

    动态规划法解决0/1背包问题(详细解答) 首先让我们回顾一下动态规划法的使用规则: 一..动态规划法的实现思路: 1.划分子问题:将元问题分解为若干个子问题,每一个子问题对应一个决策,并且子问题之间具 ...

最新文章

  1. 【C++ 语言】pthread_mutex_t 互斥锁
  2. DButils数据库升级不丢失数据
  3. HTML 常用标签演示
  4. 我们凭什么相信 5G 很安全?
  5. 多元统计分析matlab,MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法...
  6. flexbox算法实现_如何使用Flexbox实现水平滚动
  7. Hibernate之session的管理方式
  8. 红帽学习笔记[RHCSA] 第七课[网络配置相关]
  9. java版本对应jdk版本_jdk版本对应数字
  10. C/C++[Shortest Distance]
  11. VUE引入ntko office在线编辑器
  12. VOW Desktop(CAD看图软件)v1.0.1中文版
  13. 通过银行卡号获取所属银行「支付宝」
  14. 用Python对全国火车站数量进行分析,发现东北三省竟然占了2成!
  15. ubuntu 截图快捷键设置
  16. QEMU 安装与使用
  17. 2012年度江西省科学技术奖授奖项目名单
  18. 计算机excel中钱的符号,在excel中输入钱的符号
  19. 使用adb卸载安卓手机自带软件
  20. JavaSE详细总结——万字纯手码

热门文章

  1. 面向唇语识别的数据采集系统
  2. Ubantu14编译7.1.2Android系统
  3. 多目标跟踪综述、论文、数据集大汇总 Awesome Multiple object Tracking
  4. 自动的运行时软件测试工具
  5. echats 3d地图 并打点和绘制迁徙图,绘制3d柱状图 3d迁徙线3d点 lines3D bar3D scatter3D
  6. SVM实战之垃圾邮件过滤
  7. H.264嵌入式视频监控系统项目指导
  8. Windows 7设置定时重启任务方法
  9. 使用c#实现爬虫技术
  10. IP数据报---首部校验和的计算方法