动态规划-背包问题

原创 2013年12月02日 18:34:39

问题描述:the Knapsack Problem

给定n个物品,重量是{w1,...,wn},价值是{v1,...,vn},包的容量(承重)是W

问,放入哪些物品能使得包内价值最大;


思路:运用动态规划思想

1 需要将问题转化为子问题,通过递归实现,且子问题必然与父问题存在关联

2 定义V[i,j] 表示为,当item取自前i个items且背包capacity=j 时,背包问题的最优解,也即最高的价值

3 从前i个items中,选择任意一个组合的情况,可分成两个子集,一种即包含第i个item的集合,一种即不包含第i个item的集合;我们的最优解,即可从这两个子集的最优解中比较而得出;

4  无第i个item的最优解,同时capacity=j,自然是V[i-1,j],根据定义可知并不包含第i个item;

5  包含第i个item的最优解,同时capacity=j ,就是在前 i-1 个items的情况下且capacity=j-wi 的最优解(价值)第i个item(价值),用字母表示为 vi+V[i-1,j-wi]

6  为了使算法更全面,考虑一种情况,j-wi<0 ,下标会越界,

7 考虑初始状况,V[0,j]=0 for j>=0 ,V[i,0]=0 for i>=0







相关文章推荐

kruskal算法,动态规划,背包问题

  • 2013年12月09日 14:46
  • 239KB
  • 下载

动态规划背包问题入门

  • 2011年07月07日 22:53
  • 328KB
  • 下载

双核处理(动态规划的01背包问题)

题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务。n个任务可以按照任意顺序放入CP...

0-1背包问题(动态规划)

  • 2015年11月17日 14:49
  • 1KB
  • 下载

c c++ 01背包问题动态规划解决

  • 2013年11月05日 16:45
  • 28KB
  • 下载

动态规划、贪心、回溯、分支限界法解0-1背包问题总结

本文通过0-1背包问题的不同解法,深入理解计算机常用算法动态规划、贪心、回溯、分支限界法的思想。 问题描述 0-1背包问题:给定n种物品和一背包。物品i的重量是wi,其价值是vi,背包的容量为C。问...

【动态规划】常见背包问题合集

01背包:  有N件物品和一个容量为V的背包。(每件物品只有一件)第i件物品的费用是c[i],价值是v[i],求解将哪些物品装入背包使总价值最大。 转移方程:f[i][v]=max{f[i-1][v]...

动态规划法解0-1背包问题

  • 2014年06月02日 15:56
  • 1KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态规划-背包问题
举报原因:
原因补充:

(最多只允许输入30个字)