• [leetCode]剑指 Offer 47. 礼物的最大价值


    在这里插入图片描述

    解法 动态规化

     先递归分析问题,定义函数 f ( i , j ) f(i,j) f(i,j)表示到达坐标(i, j)盒子时拿到礼物的总和的最大值。有两种途径到达坐标(i,j):通过上方盒子(i-1, j);通过左方盒子(i,j-1)。所以 f ( i , j ) = m a x ( f ( i − 1 , j ) , f ( i , j − 1 ) ) + g i f t ( i , j ) f(i,j)=max(f(i-1,j),f(i,j-1))+gift(i,j) f(i,j)=max(f(i1,j),f(i,j1))+gift(i,j) g i f t ( i , j ) gift(i,j) gift(i,j)代表(i,j)位置礼物的价值。
     为了避免重复计算采用循环解法。定义一个辅助二维数组,数组中坐标(i, j)元素代表到达坐标(i,j)时礼物的价值总和的最大值。

    class Solution {
        public int maxValue(int[][] grid) {
            if(grid == null || grid.length == 0 || grid[0].length == 0)
                return 0;
            // 棋盘的行数与列数
            int rows = grid.length;
            int cols = grid[0].length;
            // 创建一个二维数组存放f(i,j),f(i,j)代表拿到第[i,j]个礼物时的礼物价值
            for(int i = 0; i < rows; ++i) {
                for(int j = 0; j < cols; ++j) {
                    int up = 0;
                    int left = 0;
                    if(i > 0)
                        up = grid[i-1][j];
                    if(j > 0)
                        left = grid[i][j-1];
                    grid[i][j] = Math.max(up, left) + grid[i][j];
                }
            }
            return grid[rows-1][cols-1];
        }
    }
    
  • 相关阅读:
    PHP调试的时候出现了警告:
    快报滚动
    js foreach、map函数
    箭头函数和普通函数的区别
    flex布局
    react+propTypes
    手机尺寸
    less的使用
    发现是在IE6-IE9下,下列元素table,thead,tfoot,tbody,tr,col,colgroup,html,title,style,frameset的innerHTML属性是只读的
    div+css 组织结构
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13859943.html
Copyright © 2020-2023  润新知