代码随想录:最后一块石头的重量二
背包容量一定,最多能装多少
class Solution {
public:
int lastStoneWeightII(vector<int>& stones) {
// 让一组石块在小于等于总重量一半的情况下尽可能的大
int sum = 0;
for (int stone : stones) {
sum += stone;
}
int target = sum / 2;
vector<vector<int>> dp =
vector<vector<int>>(stones.size(), vector<int>(target + 1, 0));
for (int j = 0; j <= target; j++) {
if (j >= stones[0])
dp[0][j] = stones[0];
}
for (int i = 1; i < stones.size(); i++) {
for (int j = 1; j <= target; j++) {
if (j >= stones[i]) {
dp[i][j] =
max(dp[i - 1][j], dp[i - 1][j - stones[i]] + stones[i]);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
return sum - 2*dp[stones.size() - 1][target];
}
};

浙公网安备 33010602011771号