作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑背包算法实现的以下部分:
// Build table K[][] in bottom up manner
for (i = 0; i <= n; i++)
{
for (w = 0; w <= W; w++)
{
if (i == 0 || w == 0)
K[i][w] = 0;
else if (wt[i - 1] <= w)
K[i][w]
= max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w]);
else
K[i][w] = K[i - 1][w];
}
}
我有一个基本的疑问,为什么我们在检查第 i 个元素时使用 wt[i-1]?
最佳答案
如果我们不选择第 i 项,这会给出我们可以获得的最佳值。考虑项目(值(value),数量); (2,1)、(3,2)、(4,5) 和一个体积为 5 的袋子。
当我们处理第三个项目时,我们可以得到一个值为 4 的值。但是如果我们不接受它,我们可以得到我们之前的最大值 5。Check this video.
关于algorithm - 背包算法 : Why we use wt[i-1] instead of wt[i],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35508288/
我是一名优秀的程序员,十分优秀!