DP的每个问题都拥有财产或任何单一财产是否足够? 如果两个条件都是必要的,我在背包问题中看不到最佳子结构。
答案 0 :(得分:0)
首先,您需要最佳结构,即通过解决较小的问题实例(子问题)可以解决问题。然后,如果子问题重叠,意味着解决不同的子问题涉及解决一些相同的子子问题,那么动态编程可以提供帮助。如果没有重叠的子问题,则动态编程是不必要的。
对于非负重量的无界背包,让best(m)
为最佳总和< = m。如果best(m) != 0
,那么best(m) = best(m-w[i]) + w[i]
代表一些权重w[i]
。
best(m-w[i])
是一个子问题。如果你能解决所有这些问题,那么解决best(m)
很容易,因此背包具有最佳结构。
此外,解决best(m-w[i])
和best(m-w[j])
都需要解决best(m-w[i]-w[j])
,这首先与best(m-w[j]-w[i])
相同,因此背包会出现重叠的子问题。
答案 1 :(得分:0)
背包具有明确的最佳子结构。
要考虑项目的所有子集,每个项目可以有两种情况:(1)项目包含在最佳子集中,(2)不包括在最优集合中。
因此,可以从n
项获得的最大值是以下两个值的最大值。
1)n-1
项和W
权重(不包括n
项)获得的最大值。
2)n
项的值加上n-1
项获得的最大值和W
减去n
项(包括n
项的权重)。
如果n
项的权重大于W
,则无法包含n
项,而案例1是唯一的可能性。