问题:https://leetcode.com/problems/last-stone-weight-ii/
01背包问题,记录不同容量的背包能否被恰好装满即可。
class Solution { public: int lastStoneWeightII(vector<int>& stones) { if (stones.size() == 1) { return stones.front(); } if (stones.size() == 2) { return abs(stones.front() - stones.back()); } int sum = accumulate(stones.begin(), stones.end(), 0); int total = sum; sum = sum / 2; vector<bool> dp(vector<bool>(sum + 1, false)); for (int i = 0; i < stones.size(); i++) { for (int j = sum; j >= stones[i] + 1; j--) { dp[j] = dp[j] | dp[j - stones[i]]; } dp[stones[i]] = true; } for (int i = sum; i >= 0; i--) { if (dp[i]) { return abs((total - i) - i); } } return 0; } };