当前位置:网站首页>leetcode 剑指 Offer 47. 礼物的最大价值
leetcode 剑指 Offer 47. 礼物的最大价值
2022-07-30 08:52:00 【kt1776133839】
题目描述:
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?
样例:
示例 1:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 12
解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物
提示:
0 < grid.length <= 200
0 < grid[0].length <= 200
解题思路:
题目说明:从棋盘的左上角开始拿格子里的礼物,并每次 向右 或者 向下 移动一格、直到到达棋盘的右下角。
根据题目说明,易得某单元格只可能从上边单元格或左边单元格到达。
设 f(i,j) 为从棋盘左上角走至单元格 (i,j) 的礼物最大累计价值,易得到以下递推关系:f(i,j)等于 f(i,j−1)和 f(i−1,j) 中的较大值加上当前单元格礼物价值 grid(i,j) 。
f(i,j)=max[f(i,j−1),f(i−1,j)]+grid(i,j)
因此,可用动态规划解决此问题,以上公式便为转移方程。

状态定义: 设动态规划矩阵 dp ,dp(i,j) 代表从棋盘的左上角开始,到达单元格 (i,j) 时能拿到礼物的最大累计价值。
转移方程:
当 i=0 且 j=0 时,为起始元素;
当 i=0 且 j≠0 时,为矩阵第一行元素,只可从左边到达;
当 i≠0 且 j=0 时,为矩阵第一列元素,只可从上边到达;
当 i≠0 且 j≠0 时,可从左边或上边到达;

初始状态: dp[0][0]=grid[0][0] ,即到达单元格 (0,0) 时能拿到礼物的最大累计价值为 grid[0][0] ;
返回值: dp[m−1][n−1],m,n分别为矩阵的行高和列宽,即返回 dp 矩阵右下角元素。
Java程序:
class Solution {
public int maxValue(int[][] grid) {
int m = grid.length, n = grid[0].length;
for(int j = 1; j < n; j++) // 初始化第一行
grid[0][j] += grid[0][j - 1];
for(int i = 1; i < m; i++) // 初始化第一列
grid[i][0] += grid[i - 1][0];
for(int i = 1; i < m; i++)
for(int j = 1; j < n; j++)
grid[i][j] += Math.max(grid[i][j - 1], grid[i - 1][j]);
return grid[m - 1][n - 1];
}
}
边栏推荐
- Unreal Engine Graphic Notes: could not be compiled. Try rebuilding from source manually. Problem solving
- HashSet和LinkedHashSet
- Integral Special Notes - Definition of Integral
- Google Cloud Spanner的实践经验
- 【零基础玩转BLDC系列】以GD32F30x为例定时器相关功能详解
- 研发转至FAE(现场应用工程师),是否远离技术了?有前途吗?
- 编程界的“躲猫猫”比赛 | 每日趣闻
- 公共Jar包的版本管理
- MySQL [operator]
- Unity性能分析 Unity Profile性能分析工具
猜你喜欢

XP电源维修fleXPower电源X7-2J2J2P-120018系列详解

2022 Hangzhou Electric Multi-School 2nd Game

负电压电路(原理分析)

初识Apifox——如何使用Apifox做一个简单的接口测试

Leetcode - 990: equations of satisfiability

获取显示器数据

激活数据潜力 亚马逊云科技重塑云上存储“全家桶”

ACL 2022 | Introduce angular margin to construct comparative learning objectives and enhance text semantic discrimination ability

MySQL Explain usage and parameter detailed explanation

聊聊 MySQL 事务二阶段提交
随机推荐
使用 Neuron 接入 Modbus TCP 及 Modbus RTU 协议设备
团队级敏捷真的没你想的那么简单
Kotlin 值类 - value class
图像分析:投影曲线的波峰查找
els 方块、背景上色
TreeSet解析
DDR、GDDR、QDR的区别
PyQt5快速开发与实战 7.4 事件处理机制入门 and 7.5 窗口数据传递
342 · Valley Sequence
知识图谱之Cypher语言的使用
SRAM与DRAM的区别
2022 Hangzhou Electric Multi-School 1st Game
开关电源波纹的产生、测量及抑制,一篇全搞定!
MySQL Explain usage and parameter detailed explanation
An article to understand service governance in distributed development
树莓派_烧写Raspberry官方镜像系统
How to Assemble a Registry
Google Cloud Spanner的实践经验
Jetpack Compose 从入门到入门(八)
MySQL [operator]