抢匪的财宝[动态规划]

【问题描述】

古威市长和韩丁纳市长都争着要找到抢匪野蛮老危的地图宝藏,放在自己城市的展览馆里。汪汪队帮助古威市长抢先一步找到了藏宝藏的地方。

宝藏埋在洞穴中长为n, 宽为m的矩形地面下。汪汪队从洞穴入口A(图中左上角)进入,从洞穴出口B(图中右下角)离开,每步只能向下走或向右走,当走到[x,y]方格时,可取出[x,y]方格及与[x,y]相邻的上下左右四个方向方格中的全部财宝。每个方格中的数表示财宝数量,如下图所示:

 

汪汪队从图中A[1,1]走到B[5,5]格时:

通过的路径是[1,1]→[2,1]→[3,1]→[4,1]→[4,2]→[4,3]→[4,4]→[4,5]→[5,5]

最多能取到财宝的数量为:0+1+2+1+0+3+0+0+8+5+0+5+0+6+7+0+8+8+6=60

【输入文件】

输入文件treasure.in中有n+1行。

第1行包含2个用空格分开的正整数n、m,分别表示洞穴中埋藏财宝地面的长和宽;接下来的n行,每行m个用空格分隔的正整数,表示各个格子中的财宝数量。

【输出文件】

输出文件treasure.out中有1个正整数,是汪汪队最多能取到的财宝数量。

【输入输出样例】

treasure.in

treasure.out

5 5

0 1 2 0 5

2 1 3 0 0

0 3 6 8 6

0 0 5 5 7

8 0 0 0 8

60

 

【数据规模】

100%的数据:1≤n,m≤500。

分析

一看就知道是一道动归 

但是要取旁边的,怎么知道取过没有呢

然后就冥思苦想

看见动归题总想着,定义f[N][N],然后想转移方程,

然后发现怎么转都转移不过来

现在筋转过来了

增加状态呀

n=500,吝啬什么,要用什么加什么

其实增加一个从哪个方向转移过来就好了

f[i][j][0]=
max(f[i-1][j][0]+a[i+1][j]+a[i][j+1]+a[i][j-1],f[i-1][j][1]+a[i+1][j]+a[i][j+1]);
f[i][j][1]=
max(f[i][j-1][1]+a[i+1][j]+a[i][j+1]+a[i-1][j],f[i][j-1][0]+a[i+1][j]+a[i][j+1]);

两行的转移方程…………

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FSYo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值