Knapsack Problem(0-1背包问题)
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背包问题)相关推荐
- Dynamic Programming 01 —knapsack problem(动态规划背包问题)
首先引入动态变化的含义:为什么要有动态规划? Introduction: 从斐波那契函数的递归中我们发现,在例子求fib(7)的过程中,我们需求得fib(5)和fib(6),而我们在求fib(6)的时 ...
- 动态规划法(四)0-1背包问题(0-1 Knapsack Problem)
继续讲故事~~ 转眼我们的主人公丁丁就要离开自己的家乡,去大城市见世面了.这天晚上,妈妈正在耐心地帮丁丁收拾行李.家里有个最大能承受20kg的袋子,可是妈妈却有很多东西想装袋子里,已知行李的编 ...
- C#,背包问题(Knapsack Problem)贪心算法的源代码
背包问题(KnapSack Problem)的相关算法是常用的规划算法. 一.什么是背包问题? 背包的问题是,你有一个"袋子",可以装有限数量的物品,鉴于你有一组物品可以从每个物品 ...
- JavaScript实现Knapsack problem背包问题算法(附完整源码)
JavaScript实现Knapsack problem背包问题算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 MergeSort.js完整源代码 Knapsack ...
- [Algorithmic Toolbox学习笔记][week6]0/1 Knapsack Problem
问题描述 具体的问题描述请参考以下链接: [Algorithmic Toolbox学习笔记][week3]战利品的最大价值_Karen_AMPM的博客-CSDN博客假设小偷有一个背包只能放下一定重量的 ...
- Python多维约束(重量+体积+次数)背包问题(Knapsack Problem)
问题描述:1.一个背包,往里装东西,物品重量w(weight)对应为[2,3,4,7] ,价值va(value)对应为[1,4,7,12] ,如果你的最大承重为20,每个物品可装次数不限,求你能装入背 ...
- Knapsack Problem
背包九讲 0-1 knapsack problem 01背包-牛客网 已知一个背包最多能容纳体积之和为V的物品,现有 n 个物品,第 i 个物品的体积为 vi , 重量为 wi,求当前背包最多能装多大 ...
- 算法设计与分析实验二:动态规划法实现TSP问题和0/1背包问题
[实验目的] 1.熟练掌握动态规划思想及教材中相关经典算法. 2.使用动态规划法编程,求解0/1背包问题和TSP问题. TSP问题 一.实验内容: TSP问题是指旅行家要旅行n个城市,要求每个城市经历 ...
- 0/1背包问题---C++动态规划法
[问题] 给定n种物品和一个背包,物品i(1≤i≤n)的重量是,其价值为,背包容量为,对于每种物品只有两种选择:装入背包或者不装入背包.如何选择装入背包的物品,使得装入背包中物品的总价值最大? [想法 ...
- C语言动态规划法解决0/1背包问题(详细解答)
动态规划法解决0/1背包问题(详细解答) 首先让我们回顾一下动态规划法的使用规则: 一..动态规划法的实现思路: 1.划分子问题:将元问题分解为若干个子问题,每一个子问题对应一个决策,并且子问题之间具 ...
最新文章
- 【C++ 语言】pthread_mutex_t 互斥锁
- DButils数据库升级不丢失数据
- HTML 常用标签演示
- 我们凭什么相信 5G 很安全?
- 多元统计分析matlab,MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法...
- flexbox算法实现_如何使用Flexbox实现水平滚动
- Hibernate之session的管理方式
- 红帽学习笔记[RHCSA] 第七课[网络配置相关]
- java版本对应jdk版本_jdk版本对应数字
- C/C++[Shortest Distance]
- VUE引入ntko office在线编辑器
- VOW Desktop(CAD看图软件)v1.0.1中文版
- 通过银行卡号获取所属银行「支付宝」
- 用Python对全国火车站数量进行分析,发现东北三省竟然占了2成!
- ubuntu 截图快捷键设置
- QEMU 安装与使用
- 2012年度江西省科学技术奖授奖项目名单
- 计算机excel中钱的符号,在excel中输入钱的符号
- 使用adb卸载安卓手机自带软件
- JavaSE详细总结——万字纯手码