2023.8.13
与分割等和子集类似,可以转化为0-1背包问题。 本题也是需要将数组元素分成两堆,区别在于本题需要使这两堆的差值最小,而之前那题是需要两堆差值为0。文章来源:https://www.toymoban.com/news/detail-646160.html
使用之前的一维dp数组的思路,代码如下:文章来源地址https://www.toymoban.com/news/detail-646160.html
class Solution {
public:
int lastStoneWeightII(vector<int>& stones) {
int sum = 0;
for(int i=0; i<stones.size(); i++)
{
sum += stones[i];
}
int target = sum / 2;
vector<int> dp(target + 1);
for(int i=0; i<stones.size(); i++)
{
for(int j=target; j>=stones[i]; j--)
{
dp[j] = max(dp[j],dp[j-stones[i]]+stones[i]);
}
}
return sum-dp[target]-dp[target];
}
};
到了这里,关于leetcode 1049. 最后一块石头的重量 II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!