Algorithm 这个算法对背包的变化有效吗?

Algorithm 这个算法对背包的变化有效吗?,algorithm,knapsack-problem,Algorithm,Knapsack Problem,我不确定实际变化有多大,但问题是: 你即将开始一段漫长的旅程,在你出发之前,你需要收拾好你的包。您可以选择N件物品随身携带。每个项目都有一个权重和值,表示它的有用程度。你不能携带超过K公斤的物品。您可以随身携带的物品的最大总价值是多少?(每个项目只能有一份副本。) 我已经创建了一个算法,我认为它可以用DP解决这个问题,但我不确定它是否有效,如果你们中的一个能看一下,那就太好了。注意:它更像是psuedo代码和算法的组合,我也不太确定如何编写 假设k是最大重量。 两个数组:一个包含每个项目的权重w

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

你即将开始一段漫长的旅程,在你出发之前,你需要收拾好你的包。您可以选择N件物品随身携带。每个项目都有一个权重和值,表示它的有用程度。你不能携带超过K公斤的物品。您可以随身携带的物品的最大总价值是多少?(每个项目只能有一份副本。)

我已经创建了一个算法,我认为它可以用DP解决这个问题,但我不确定它是否有效,如果你们中的一个能看一下,那就太好了。注意:它更像是psuedo代码和算法的组合,我也不太确定如何编写

假设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]
            }
        }
    }
}
表示i=0;i=0)
{
k=k-w[j]
值=值+v[j]
}
}
}
}

不,你的贪婪算法行不通

检查此示例:

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

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

不,贪婪算法不起作用

检查此示例:

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

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

@user2396852如果您需要更多帮助,请随时询问。可以,我正在尝试使用DP来解决它。只要试着计算我的表格,就会让你知道我是否有任何问题。@user2396852如果你需要更多的帮助,请随时询问。会的,我正在尝试使用DP来解决它。如果我有什么问题,我会告诉你的。