本博客主要内容为图书《剑指offer》第二版47 题的解题思路及代码。方法可能还有不足之处,欢迎大家讨论评论。
1. 题目描述
在一个 m*n 的棋盘中的每一个格都放一个礼物,每个礼物都有一定的价值(价值大于0).你可以从棋盘的左上角开始拿各种里的礼物,并每次向右或者向下移动一格,直到到达棋盘的右下角。给定一个棋盘及上面个的礼物,请计算你最多能拿走多少价值的礼物?
比如说现在有一个如下的棋盘,
在这个棋盘中,按照(1,12,5,7,7,16,5)的顺序可以拿到总价值最大的礼物(总和为53)。
2. 题目分析
我们首先使用递归的思路进行分析,当求解到达右下角时礼物的最大总价值时,可以通过如下的递推关系进行计算
f ( i , j ) = m a x ( f ( i − 1 , j ) , f ( i , j − 1 ) ) + g ( i , j ) f(i,j)=max(f(i-1,j),f(i,j-1))+g(i,j) f(i,j)=max(f(i−1,j),f(