此题要射箭,而且必须比Bob多一支,所以如果决定了要射哪个靶子,那要射的箭的数目是一定的。
所以,我们可以将这个问题转化为01背包问题。注意,此题需要做回溯,而背包做回溯和最长上升子序列不一样,是需要存二维数组然后回溯的。
我们应该知道,一维01背包是由二维背包转化而来的。背包问题的核心是选或者不选, d p [ i ] [ j ] dp[i][j] dp[i][j] 表示前i个物品的最佳组合在容量为 j j j 的背包中取得的最大价值,即 d p [ i ] [ j ] = m a x ( d p [ i − 1 ] [ j ] , d p [ i − 1 ] [ j − w [ i ] ] + v [ i ] ) dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]]+v[i]) dp[i][