乌龟棋 【线性DP】

传送门
老年选手,看似不难的题目,居然花了2小时才想出来。
现在正正经经地写题解吧。

注意(输入数据保证到达终点时刚好用光 M 张爬行卡片)
这说明所有卡牌里面的格子数加起来恰好等于总的格子数。
爬行的卡片的格子数不超过4(我就是没有注意到,前面的时间都在想如何表述状态)。
我们就可以用4维数组f[a][b][c][d]来描述状态,表示已经用了格子数为1的卡a张,格子数为2的卡b张,格子数为3的卡c张,格子数为4的卡d张的最好的分数。
那么状态如何转移?
因为我们每次用1张牌。假设用了格子数为1的牌
那么 f[a][b][c][d]=max{f[a][b][c][d],f[a-1][b][c][d]+score[x]} score[x] 表示在x位置(使用了牌子后所在的位置)的的分数。
其他同理。

四重循环+转移方程。时间复杂度为O(40^4)。

code:略,代码就不贴了。
既然都要刷题就不应该存在语法都不会的问题,那代码就应该自己实现呀。
思路往往比代码实现重要多了。

你可能感兴趣的:(乌龟棋 【线性DP】)