题解 | #最长不含重复字符的子字符串#

礼物的最大价值

http://www.nowcoder.com/practice/2237b401eb9347d282310fc1c3adb134

max2更好理解

确定坐标(i,j) 最大值只与上边(i-1,j)和左边(i,j-1)的值有关系,动态规划求解。

//横为i,列为j
    public  int  max(int[][] grid){
        if(grid==null||grid.length==0){return  0;}
        int m=grid.length;
        int n=grid[0].length;
        //改装一位数组
        int[] dp=new int[n+1];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                dp[j+1]=Math.max(dp[j],dp[j+1])+grid[i][j];
            }
        }
        return   dp[n];
    }




    public  int  max2(int[][] grid){
        if(grid==null||grid.length==0){return  0;}
        int m=grid.length;
        int n=grid[0].length;
        int[][] dp=new int[m][n];
        dp[0][0]=grid[0][0];
        //初始化第一行
        for (int i = 0; i < n; i++) {
            dp[0][i]=dp[0][i-1]+grid[0][i];
        }
        for (int i = 0; i < m; i++) {
            dp[i][0]=dp[i-1][0]+grid[i][0];
        }

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1])+grid[i][j];
            }
        }

        return   dp[m-1][n-1];
    }

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务