https://leetcode-cn.com/problems/last-stone-weight-ii/
注意到:
其实等价于把石子分为两堆,求他们差的最小值,这就是一个裸的背包dp了
public int lastStoneWeightII(int[] stones) {
int sum = Arrays.stream(stones).sum();
boolean[] dp = new boolean[sum + 1];
dp[0] = true;
for (int x : stones) {
for (int j = sum; j >= x; j--) {
dp[j] |= dp[j - x];
}
}
int res = Integer.MAX_VALUE;
for (int i = 0; i <= sum; i++) {
if (dp[i]) res = Math.min(res, Math.abs(sum - i - i));
}
return res;
}