我是靠谱客的博主 粗暴紫菜,最近开发中收集的这篇文章主要介绍Dynamic Programming 学习笔记(三),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2维DP问题
问题:一个拥有N*M个单元的格子,每一个里面都有着一定数量的苹果,数量已经给定。现在你位于左上角。每一步你可以向下走或者向右走。问
你能够收集到最多多少个苹果。

    这个问题可以向其他DP问题一样来解决;几乎没有差别。首先我们需要找出一个状态。首先我们需要注意到到某个单元里最多有两种方法-要么从它的左边过来(如果当前格子不是在第一列的话),要么从上方过来(如果它不是在最上面的行的话)。为了找到该单元的最优方案,我们首先需要找到到达它的单元的最优方案。

我们可以很容易的得到转移关系:
S[i][j]=A[i][j]+max(S[i-1][j], S[i][j-1]) 

式中,i代表行,j代表列。A[i][j]为i,j单元格中的苹果数量。S[i][j]需要在每行中从左到右计算,并且从上到下计算每一行,或者从上到下计算每一列然后从左到右处理每一列。

最后

以上就是粗暴紫菜为你收集整理的Dynamic Programming 学习笔记(三)的全部内容,希望文章能够帮你解决Dynamic Programming 学习笔记(三)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部