我不确定它实际上有多少变化,但问题在于:
你即将开始漫长的旅程,在你这么做之前,你需要打包行李。您可以选择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]
}
}
}
}
答案 0 :(得分:3)
不,你的贪婪算法不起作用。
检查此示例:
MaxWeight = 12
Items = 4 5 4 4 (each value is 1)
您的算法将选择项目1和2(或项目2和3,或3和4)。最佳解决方案是采用第1,3和4项。