SPOJ MARTIAN 题解
思路
首先简单理解一下题目,会发现题目就是在网格上选择若干列(或列的上面一段)以及若干行(或行的左边一段)似的这些被选中的列和行之间的和最大。具体可以看题目的这张图:

很明显这是一个 DP 问题,于是我们着手设计状态转移方程。首先我们先分别预处理出纵向的和横向的两个前缀和分别是 \(y_{i,\,j}\) 和 \(b_{i,\,j}\),字母对应题目的矿物名称首字母。然后我们设状态 \(f_{i,\,j}\) 表示从这个位置开始到左上角的答案(最多的采矿数量和)。然后我们发现状态 \(f_{i,\,j}\) 只与 \(f_{i - 1, j}\) 和 \(f_{i,\, j - 1}\) 有关。
稍加思考即可得出我们的状态转移方程: \[ f_{i,\,j} = \max\left(f_{i - 1,\,j} + b_{i,\,j},\, f_{i,\,j - 1} + y_{i,\,j}\right) \] 于是就可以快乐 DP 了。
代码
1 | |
“觉得不错的话,给点打赏吧 (✿◕‿◕✿)”
微信支付
支付宝支付 (暂不支持)
SPOJ MARTIAN 题解
https://lixuannan.github.io/posts/57531.html