hdu / hdoj 2571 命运 (简单二维DP,注意边界负数)

超级传送门:

http://acm.hdu.edu.cn/showproblem.php?pid=2571

 

题目大意:

有个地图,是二维的矩阵,矩阵里面的数值是幸运值K(K可以取负数,( |K|<100 ))

yifenfei(人名) 要从(1,1) 走到(n,m),求路过幸运值K的和最大是多少。

yifenfei在(x,y)可以走到(x+1,y),(x,y+1) 或者 (x,y*k) 其中k>1。

 

题目分析:

yifenfei在(x,y)可以走到(x+1,y),(x,y+1) 或者 (x,y*k) 其中k>1。 前面不影响后面,是一个很典型的DP。

 

既然是DP,就先分析一下转换方程:

 

假设小Y在(i,j) ,则上一步就是在(i-1,j) 或者(i,j-1) 或者 (i,j / k)(其中j % k ==0 && k != 1)

所以转换方程也就很容易出来了 f(i,j) = max( f(i-1,j) , f(i,j-1),f(i,j / k)(其中 j % k ==0 && k != 1) )

 

方程得到以后,就是确定边界条件:

这时候不得不关注到 幸运值K(K可以取负数,( |K|<100 )) 所以边界不能取0,我们把边界定为非常小,这样就保证转换方程就不会越界了

私人觉得DP的题目最好还是从1开始记录,0留空当边界,相对比较好处理

而且很容易发现 : 竖边界每个点只能从正上方下来 也就是:f[ i][ 1 ] = f[ i- 1 ][ 1 ] + p[ i][ 1 ];(p是(i,j)的幸运值K)

而横边界就是非常小

 

把这些都分析清楚了那么代码就很好写了

下面是整体AC的代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值