UVa 1366 - Martian Mining (dp)



 

本文出自   http://blog.csdn.net/shuangde800


 

题目链接: 点击打开链接


题目大意

给出n*m网格中每个格子的A矿和B矿数量,A矿必须由右向左运输,B矿必须由下向上运输,管子不能拐弯或者间断。要求收集到的A,B矿总量尽量大。


思路

由题意可知,如果格子(i,j)上选择运输A矿的话,那么i行的1~j就要全部选择A矿。

同理,如果选择B矿,那么第j列上的1~i行要全部选择B矿


所以推出下面的状态转移方程式:


f[i][j][0]表示第i行第j列为右下角顶点的矩形区域内,格子(i,j)上选择运输A矿情况下的最大总和
f[i][j][1]表示第i行第j列为右下角顶点的矩形区域内,格子(i,j)上选择运输B矿情况下的最大总和

那么
f[i][j][0] = max(f[i-1][j][0], f[i-1][j][1]) + sum{第i行的1~j列的A矿之和}
f[i][j][1] = max(f[i][j-1][0], f[i][j-1][1]) + sum{第j列的1~j行的B矿之和};
最终答案是max{f[n][m][0], f[n][m][1]}



代码:

 

 

 

 

 

posted on 2013-08-05 18:58  you Richer  阅读(179)  评论(0编辑  收藏  举报