题面:https://www.luogu.org/problemnew/show/P1541
题意
给定一个棋盘,上面由N个格子。每个格子上面有一个对应的分数。同时有若干张卡片上面分别是1,2,3,4。每张卡片使用后可以前进对应的格数。显然不同的使用卡片会导致不同的分数。求最后能获得的最大分数。
解法
乍看之下,是个dp
但是好像不是很好写,想了一段时间也没想出来状态。
然后发现由于卡片只有四种。
我们可以用$dp[c1][c2][c3][c4][i]$表示每种卡片分别用了$c1, c2, c3, c4$张时到达第$i$个格子时获得的最大分数。
这样每次转移就是多一张卡片带来的结果改变。
但这样发现空间需要$40 ^4 \cdot 120$空间开不下。
发现每次转移的时候前一个状态只会在前四个格子内向后转移。所以可以用取模只需要5个位置
但是这样时间复杂度到达$O(40 ^4 \cdot 120)$会超时
然后发现蠢了,可以去掉最后一个维度,因为用了多少张卡片会有到达一个固定的位置。
所以就去掉最后一个维度,直接dp就好了
回过头来想,这个就是一个多重背包问题。
每个物品的体积为1,价值为格子对应的分数。
做完了。
1 |
|