剑指offer_礼物的最大价值

题目描述

在一个 m*n 的棋盘的每一个格都放有一个礼物,每个礼物都有一定价值(大于 0)。从左上角开始拿礼物,每次向 右或向下移动一格,直到右下角结束。给定一个棋盘,求拿到礼物的最大价值。例如,对于如下棋盘

 

 礼物的最大价值为 1+12+5+7+7+16+5=53。

解题思路

应该用动态规划求解,而不是深度优先搜索,深度优先搜索过于复杂,不是最优解。

 1 public int getMost(int[][] values) {
 2 if (values == null || values.length == 0 || values[0].length == 0)
 3   return 0;
 4 int n = values[0].length;
 5 int[] dp = new int[n];
 6 for (int[] value : values) {
 7   dp[0] += value[0];
 8 for (int i = 1; i < n; i++)
 9   dp[i] = Math.max(dp[i], dp[i - 1]) + value[i];
10 }
11   return dp[n - 1];
12 }

 

posted @ 2019-09-08 10:43  chyblogs  阅读(159)  评论(0)    收藏  举报