0

我不确定它实际上有多少变化,但问题是:

您即将踏上漫长的旅程,在此之前您需要收拾行装。您可以选择 N 个可以随身携带的物品。每个项目都有一个权重和值,代表它的有用程度。您将不能携带超过 K 公斤的物品。您可以携带的物品的最大总价值是多少?(每个项目您只能拥有一份副本。)

我创建了一个算法,我认为它可以使用 DP 解决问题,但我不确定它是否会起作用,如果你们中的一个人能看一下它会很棒。注意:它更像是伪代码和算法的组合,我也不太清楚如何编写。

假设 k 是最大权重。两个数组:一个包含每个项目的权重 w[],另一个包含值 v[]。

 for i = 0; i<numberOfItems; i++
 {
    value = 0
    k = MaxWeight;
    for(j = i; j<numberOfItems; j++
    {
        if(j = i)
        {
            if(k - w[i] >= 0)
            {
                k = k-w[i]
                value = value + v[i]
            }
        }
        else
        {
            if(k - w[j] >= 0)
            {
                k = k-w[j]
                value = value + v[j]
            }
        }
    }
}
4

1 回答 1

3

不,你的贪心算法行不通。

检查这个例子:

MaxWeight = 12
Items = 4 5 4 4 (each value is 1)

您的算法将选择项目 1 和 2(或项目 2 和 3,或项目 3 和 4)。最佳解决方案是采取第 1、3 和 4 项。

于 2013-08-02T10:51:48.520 回答