用动态规划求解 背包问题

aaalife 2003-10-21 11:53:59
那位仁兄给俺点详细的提示。俺看了半天书也没看懂。:(

俺看的是 王晓东 的 《算法设计与分析》

俺是新手,先谢谢各位大哥大姐!!
...全文
80 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaalife 2003-10-23
  • 打赏
  • 举报
回复
好!
謝謝 jwd_1_cool(三疯) 和 liujiboy(liujiboy)
馬上給分~~~~~~~~~~~~~~~~
liujiboy 2003-10-22
  • 打赏
  • 举报
回复
前几天我也在看王晓东的书,他这个家伙简直太不会写代码啦,思想倒是介绍清楚了,但是范例代码就太垃圾啦。我是看了两天才搞清楚他在写什么。
对于第一个算法:用了一个二维数组来表示结果m[i][j],表示背包容量为j,从i个物品到n个物品的最优结果。可以这样讲假设现在有10个物品,背包容量为5。我们现在选择到了第5个物品,那么前5个物品被选如的情况是0-5.如果前面五个物品选如后背包容量还剩0,那么就是m[5][0],如果还剩1,那么就是m[5][1],如此背包还剩2是m[5][2]一次类推,由于我们不知道到底可以剩下多少因此需要求出m[5][0]-m[5][5]之间的所有值,但是m[5][j]的求得依赖于m[6][j],以次类推,直到m[10][j].m[10][j]就可以求得啦,因为当j>=wn时m[n][j]=vn,反之为0。
程序的前两个for循环是在求m[n][j].然后后面的for循环是在求其他的。只有求出m[n][j]才能用递归求剩下的。
真想建议王晓东同志学习一下代码的书写,真是垃圾。
jwd_1_cool 2003-10-22
  • 打赏
  • 举报
回复
2.5. Zero-One Knapsack (0-1)

Zero-One Knapsack Problem:
Input: N items, each with various Vi (Value) and Wi (Weight) and max Knapsack size MW.
Output: Maximum value of items that one can carry, if he can either take or not-take a particular item.

Let C[i][w] be the maximum value if the available items are {X1,X2,...,Xi} and the knapsack size is w.

Recurrence Relation:

;; if i == 0 or w == 0 (if no item or knapsack full), we can't take anything
C[i][w] = 0

;; if Wi > w (this item too heavy for our knapsack), skip this item
C[i][w] = C[i-1][w];

;; if Wi <= w, take the maximum of "not-take" or "take"
C[i][w] = max(C[i-1][w] , C[i-1][w-Wi]+Vi);

;; The solution can be found in C[N][W];

DP pseudo code:

for (i=0;i<=N ;i++) C[i][0] = 0;
for (w=0;w<=MW;w++) C[0][w] = 0;

for (i=1;i<=N;i++)
for (w=1;w<=MW;w++) {
if (Wi[i] > w)
C[i][w] = C[i-1][w];
else
C[i][w] = max(C[i-1][w] , C[i-1][w-Wi[i]]+Vi[i]);
}

output(C[N][MW]);

aaalife 2003-10-22
  • 打赏
  • 举报
回复
這個我懂。不過書上的程序我卻看不懂。
程序徬邊沒有註釋····哎~~~:(
Kavent 2003-10-22
  • 打赏
  • 举报
回复
v(i,j)表示以j为上限拿前i个包里的东西的重量最大值,
v(n,m)就是要求的最值。
对于每个物品i,v(i,k)=max(v(i-1,j),v(i,j-si)+vi)
si是i物品的重量,vi是价值
aaalife 2003-10-21
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2332/2332647.xml?temp=.9356195

和它差不多

是简单的 0-1 背包问题。

希望哪位仁兄 给我点 提示。也就是 详细点的编程思路。感激不尽···························
ZhangYv 2003-10-21
  • 打赏
  • 举报
回复
就是一个排序吧?

33,006

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧