想法
就是尽可能的把石头等分成两堆,和等分子集一样。
c++ 代码
public:
int lastStoneWeightII(vector<int>& stones)
{
int len = stones.size();//
int sum = 0;
for (int &x : stones)
sum += x;
int bag = sum / 2; //背包容量 因为平分一个包就是总和的一半
vector<int> dp(bag + 1);
dp[0] = 0;//没有包,就是0
for (int i = 0; i < len; i++)
{
for (int j = bag; j >= stones[i]; j--)//包最大的先开始更新
{
dp[j] = max(dp[j], dp[j-stones[i]] + stones[i]);
}
}
int diff = 0;
diff = sum - (dp[bag] * 2);
return diff;
}
};