1049
AC代码
class Solution {
public:
int lastStoneWeightII(vector<int>& stones) {
int n = stones.size(), m = 0;
for (auto x : stones) m += x;
int w = m / 2;
vector<vector<int>> f(n + 1, vector<int>(m + 1));
// 前0 ~ i物品,容积为j的背包可以拿的最大的价值
// 只能拿0号物品,且体积为stones[0]
for (int j = stones[0]; j <= w; j++) {
f[0][j] = stones[0];
}
for (int i = 1; i < n; i ++ )
// for (int j = m; j >= 0; j -- )
for (int j = 1; j <= w; j ++ )
{
f[i][j] = f[i - 1][j];
if (j >= stones[i]) f[i][j] = max(f[i][j], f[i - 1][j - stones[i]] + stones[i]);
}
return m - 2 * f[n - 1][w];
}
};