hdu 2686

这个题目在面试的时候被问到了,首先问我的是一个人版本的,然后增加到两个人版本的。

题目的含义是:一个n*n的棋盘,每个棋盘上有金矿,该金矿拿走后就没有了,问一个人从(0,0)->(n,n)然后再从(n,n)->(0,0)(这次的路径不能和上次的重叠),使得两次的和最大。


这道题目我一点思路也没有,网上看了一下,据说是双线程dp,状态转移方程为:dp(k,x1,y1,x2,y2)=max(dp(k-1,x1-1,y1,x2-1,y2), dp(k-1,x1-1,y1,x2,y2-1), dp(k-1,x1,y1-1,x2-1,y2), dp(k-1,x1,y1-1,x2,y2-1))+mat[x1][y1]+mat[x2][y2]; k表示从起点(1,1)到该点的步数,另外根据x1+y1=k可以对该dp方程进行降维,降维后的dp方程为:

dp(k,x1,x2)=max(dp(k-1,x1-1,x2-1), dp(k-1,x1-1,x2), dp(k-1,x1,x2-1), dp(x1,x2))+mat[x1][k-x1]+mat[x2][k-x2];


代码如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值