admin管理员组

文章数量:1035179

动态规划完全背包系列一>完全平方数

题目转化:

这里是引用

状态表示:

这里是引用

状态转移方程:

这里是引用

初始化:

这里是引用

填表顺序:

这里是引用

返回值:

这里是引用

代码呈现:

代码语言:javascript代码运行次数:0运行复制
class Solution {

    public int numSquares(int n) {
        int aim = (int)Math.sqrt(n);
        int[][] dp = new int[aim+1][n+1];

        int INF = 0x3f3f3f3f;
        //初始化
        for(int i = 1; i <= n; i++) dp[0][i] = INF;
        
        for(int i = 1; i <= aim; i++)
            for(int j = 0; j <= n; j++){
                dp[i][j] = dp[i-1][j];
                if(j >= i*i)
                    dp[i][j] = Math.min(dp[i][j], dp[i][j-i*i]+1);
            }

        return dp[aim][n];    
    }
}

空间优化版本:

代码语言:javascript代码运行次数:0运行复制
int aim = (int)Math.sqrt(n);
        int[] dp = new int[n+1];

        int INF = 0x3f3f3f3f;
        //初始化
        for(int i = 1; i <= n; i++) dp[i] = INF;
        
        for(int i = 1; i <= aim; i++)
            for(int j = i*i; j <= n; j++){
                dp[j] = Math.min(dp[j], dp[j-i*i] + 1);
            }

        return dp[n];
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-03-23,如有侵权请联系 cloudcommunity@tencent 删除动态规划优化dpintmath

动态规划完全背包系列一>完全平方数

题目转化:

这里是引用

状态表示:

这里是引用

状态转移方程:

这里是引用

初始化:

这里是引用

填表顺序:

这里是引用

返回值:

这里是引用

代码呈现:

代码语言:javascript代码运行次数:0运行复制
class Solution {

    public int numSquares(int n) {
        int aim = (int)Math.sqrt(n);
        int[][] dp = new int[aim+1][n+1];

        int INF = 0x3f3f3f3f;
        //初始化
        for(int i = 1; i <= n; i++) dp[0][i] = INF;
        
        for(int i = 1; i <= aim; i++)
            for(int j = 0; j <= n; j++){
                dp[i][j] = dp[i-1][j];
                if(j >= i*i)
                    dp[i][j] = Math.min(dp[i][j], dp[i][j-i*i]+1);
            }

        return dp[aim][n];    
    }
}

空间优化版本:

代码语言:javascript代码运行次数:0运行复制
int aim = (int)Math.sqrt(n);
        int[] dp = new int[n+1];

        int INF = 0x3f3f3f3f;
        //初始化
        for(int i = 1; i <= n; i++) dp[i] = INF;
        
        for(int i = 1; i <= aim; i++)
            for(int j = i*i; j <= n; j++){
                dp[j] = Math.min(dp[j], dp[j-i*i] + 1);
            }

        return dp[n];
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-03-23,如有侵权请联系 cloudcommunity@tencent 删除动态规划优化dpintmath

本文标签: 动态规划完全背包系列一>完全平方数