1049. 最后一块石头的重量 II

1049. 最后一块石头的重量 II

转换成capacity=sum/2的01背包

class Solution {
public:
    int lastStoneWeightII(vector<int>& sts) {
        int sum=0;
        for(auto i:sts)sum+=i;
        int cap=sum/2;
        int n=sts.size();
        int dp[n][cap+1];
        
        memset(dp,0,sizeof dp);
        for(int i=0;i<n;i++){
            for(int j=0;j<=cap;j++){
                if(j<sts[i]){
                    if(i)dp[i][j]=dp[i-1][j];
                }else{
                    if(i)dp[i][j]=max(dp[i-1][j],dp[i-1][j-sts[i]]+sts[i]);
                    else dp[i][j]=sts[i];
                }
            }
        }

        return sum-2*dp[n-1][cap];
    }
};

空间优化
01背包的空间优化是j倒着来
for(int j=cap;j>=sts[i];j--)
完全背包的空间优化是正着来

class Solution {
public:
    int lastStoneWeightII(vector<int>& sts) {
        int sum=0;
        for(auto i:sts)sum+=i;
        int cap=sum/2;
        int n=sts.size();
        int dp[cap+1];
        
        memset(dp,0,sizeof dp);
        for(int i=0;i<n;i++){
            for(int j=cap;j>=sts[i];j--){
                dp[j]=max(dp[j],dp[j-sts[i]]+sts[i]);
            }
        }

        return sum-2*dp[cap];
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容