剑指offer47.礼物的最大价值

在一个 m*n的棋盘每一格都有一个礼物,每个礼物都有一定的价值。从棋盘左上角开始拿礼物,每次向左或向下移动一格。最多能拿多少价值的礼物

思路:动态规划。这是一个典型的用动态规划解决的问题。先用递归思想分析。f(i,j)=max(f(i-1,j),f(i,j-1))+gift[i,j] ] 。但是递归的代码有大量的重复问题,所以使用循环的方法。为了缓存中间计算结果,需要一个辅助的二维数组,数组中左边(i,j)的元素表示到达该坐标的格子能拿到的礼物价值总和的最大值。进一步优化,到达坐标为(i,j)的格子时能够拿到的礼物的最大价值只依赖坐标为(i-1,j)和(i,j-s)两个各自,因此 i-2行及更上面的所有格子礼物的最大价值实际上没有必要保存下来。可以用一个一维来替代前面代码中的二维矩阵。一维数组的长度位棋盘的列数 n。数组的前 j 个数字分别是 f(i,0),f(i,1),…,f(i,j-1),数组从下标位 j 的数字开始到最后一个数字,分别为 f(i-1,j),f(i-1,j+1),…f(i-1,n-1)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,785评论 0 2
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 14,691评论 0 89
  • 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...
    Observer_____阅读 8,094评论 0 1
  • 怎么会有《青蛇》这部电影呢。 法海法力无边,可他却被魔障所困,于幻像中被丑陋魔怪所困。可他的魔障是什么呢? 法海可...
    03da5d02c6d2阅读 2,415评论 0 0
  • 前段时间网上特别热的是地铁上吃泡面的事,网上议论纷纷,本来不从来不看热点新闻的我也被动知道了这个事,因为我们班级有...
    张善崔阅读 4,119评论 0 1