我不确定它实际上有多少变化,但问题是:
您即将踏上漫长的旅程,在此之前您需要收拾行装。您可以选择 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]
}
}
}
}