最后一块石头的重量II(01背包)

class Solution {
public:
    int lastStoneWeightII(vector<int>& stones) {
        if(stones.size() == 0) return 0;
        int n = stones.size();
        int sum = 0;
        for(auto x:stones) sum+=x;
        int target = sum/2;
        vector<vector<int>> dp(n+1,vector<int>(target+1,0));
        for(int i = 1;i<=n;i++){
            for(int j = 0;j<=target;j++){
                if(j < stones[i-1]) dp[i][j] = dp[i-1][j];
                else{
                    dp[i][j]=max(dp[i-1][j],dp[i-1][j-stones[i-1]]+stones[i-1]);
                }
            }
        }
        return sum - dp[n][target] * 2;
    }
};
posted @ 2025-01-13 22:58  陈浩辉  阅读(7)  评论(0)    收藏  举报
ヾ(≧O≦)〃嗷~