1049 最后一块石头的重量 II
Posted HardyDragon_CC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1049 最后一块石头的重量 II相关的知识,希望对你有一定的参考价值。
最后一块石头的重量 II
思路
- 尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。
- 所以背包的最大容量为 sum / 2;
- 求出背包最大容量的重量后,用 sum 消去两堆石头得到剩下的石头重量。
class Solution {
public int lastStoneWeightII(int[] stones) {
int sum = 0;
for(int num: stones) sum += num;
int target = sum / 2;
int[] dp = new int[target+1];
for(int i = 0;i < stones.length;i++){
for(int j = target;j >= stones[i];j--){
dp[j] = Math.max(dp[j],dp[j - stones[i]] + stones[i]);
}
}
return sum - (2*dp[target]);
}
}
总结
思路和 416 分割等和子集 类似
以上是关于1049 最后一块石头的重量 II的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode1049. 最后一块石头的重量 II / 牛客:毕业旅行问题(状压DP)