class Solution {
public:
int lastStoneWeightII(vector<int>& stones) {
int sum = 0;
int size = stones.size();
for(int i=0;i<size;i++){
sum += stones[i];
}
int target = sum/2;
vector<int>dp(3010,0);
for(int i = 0;i<size;i++){
for(int j=target;j>=stones[i];j--){
dp[j]=max(dp[j],dp[j-stones[i]]+stones[i]);
}
}
int temp = sum-dp[target];
return abs(temp-dp[target]);
}
};