198、279、322

198

这道题可以用二维dp做,dp[i][0]表示第i间房偷,dp[i][1]表示第i间房不偷,dp[i][0]=dp[i-1][1]+nums[i];dp[i][1]=max(dp[i-1][0],dp[i-1][1])。

279

这道题是背包类问题,可以把总和当作背包的容量,遍历过程中每个序号的和当作物品,dp数组表示装入物品数的最小值。

class Solution {

public:

    int numSquares(int n) {

        vector<int> dp(n+1,INT_MAX);

        dp[0]=0;

        for(int i=1;i<=n;i++)

        {

            for(int j=1;j*j<=i;j++)

            {

                dp[i]=min(dp[i],dp[i-j*j]+1);

            }

        }

        return dp[n];

    }

};

322

这道题的解法和上面那道题是一样的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容