这部分有点难,看了三个的思路,做了一道题
一、最后一块石头的重量 II
class Solution {
public:
int lastStoneWeightII(vector<int>& stones) {
//分成两堆,使得两堆的“价值”(重量)尽可能的接近
//dp[j]容量为就j的时候价值尽可能的大
//一共重量为n,理想情况,一半一半
//但是不是,所以在一半容量的情况使得尽可能的大,则使得两边尽可能平衡
vector<int> dp(1501,0);
int sum=0;
for(int i=0;i<stones.size();i++)
{
sum+=stones[i];
}
int mid=sum/2;
for(int i=0;i<stones.size();i++)
{
for(int j=mid;j>=stones[i];j--)
{
dp[j]=max(dp[j],dp[j-stones[i]]+stones[i]);
}
}
return sum-dp[mid]-dp[mid];
}
};