动态规划入门(二)DP 基本思想 具体实现 经典题目 POJ1088 POJ1163 POJ1050

(一) POJ1088,动态规划的入门级题目。嘿嘿,连题目描述都是难得一见的中文。

题目分析

求最长的滑雪路径,关键是确定起点,即从哪开始滑。

不妨设以( i, j )为起点,现在求滑行的最长路径。

首先,( i, j )能滑向的无非就是它四周比它低的点。到底滑向哪个点?很简单,谁长滑行谁。假设(i, j )--->( i, j+1 ), 现在就变成了:以( i, j+1 )为起点,求最长滑行路径的问题。这样一直下去,直到某个局部最低点,就算滑行结束了。


状态转换方程

dp( i,j ) = Max( dp( i-1, j ), dp( i, j+1 ),dp( i+1, j ), dp( i, j-1 ) ) + 1;

其中:dp( i,j )表示以( i, j )为起点,所能滑行的最长长度 

编程实现

枚举起点,找到最长的滑行路径。因为涉及到上下左右的点,所以注意边界情况的处理。还是记忆化递归来的简便,直接把Invalid的情况给剪掉。

 

(二) POJ1163,DP的入门级题目。和上面的POJ1088有些相似,也可以看成从上往下滑。不过起点是确定的,只能( 1, 1 )开始。

 题目分析:

要使和最大,关键是确定终点。不妨设以( i, j )为起点,现在求滑行的最长路径。

如果( i, j )为终点,则前一个点只可能是( i-1, j-1 )或者( i-1, j )。选择的标准,还是看哪个点更优。如果假设( i, j )--->( i-1, j-1 ),则问题又变成了:以( i-1, j-1 )为终点求最大和的问题。

 状态转换方程:

dp( i,j ) = Max( dp( i-1, j-1 ), dp( i-1, j) ) + data[i][j];

其中:dp( i,j )表示以( i, j )为终点,所得到的最大和。

data[i][j]表示三角矩阵中第i行第j列的值

 编程实现:

同样,要注意三角矩阵的边界。边界的有些点不能用状态方程就去。如图2所示,(3,1)和(3,3)要单独处理。


(三) POJ1050,动态规划必做题目,经典程度五颗星。这个题目的前身就是&

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值