
线性动态规划
「已注销」
这个作者很懒,什么都没留下…
展开
-
洛谷—P1541 乌龟棋题解
题目链接: P1541 乌龟棋 解题思路: 因为当前的状态与我们用过的牌有关,所以用一个四维数组记录当前已经用掉的牌数dp[a][b][c][d],这个状态可以由上一个状态dp[a - 1][b][c][d]、dp[a][b - 1][c][d]、dp[a][b][c - 1][d]、dp[a][b][c][d - 1]转移而来。所以我们可以枚举每种牌的数量,计算使用当前状态的牌到达的位置即可。 for (int a = 0; a <= f[1]; a++) { for (int b = 0;原创 2020-10-27 21:47:15 · 307 阅读 · 0 评论 -
洛谷—P3842 [TJOI2007]线段题解
题目链接: P1541 乌龟棋 解题思路: 从第i-1行走到第i行只有两种可能->要么从第i-1行线段的最左端,要么从第i-1行的最右端。所以我们可以定义二维数组来表示这个状态。用f[i][0]表示走完第i行且停在第i行的左端点最少用的步数。f[i][1]同理,停在右端点的最少步数。 dp[i][0] = min((dp[i - 1][0] + dis(r[i], l[i - 1]) + r[i] - l[i]), dp[i - 1][1] + dis(r[i], r[i-1])+ r[i] - l[原创 2020-10-27 21:14:53 · 332 阅读 · 0 评论 -
洛谷—P1095 守望者的逃离题解
题目链接:P1095 守望者的逃离 解题思路:首先DP的套路就是先找状态,这题也找不出其他的状态了,只有时间一个,所以用f[i]表示时刻i能走多远。仔细一想实际上决策只有跑、闪现、停三种决策 然而闪现的耗蓝要和跑步一同计算十分麻烦。于是把它们分开算:先算闪现的,有以下框架 for i in range(1,t) 如果蓝量够 闪现,耗蓝 如果不够 停下,回蓝 接下来算走路,其实走路的只要维护之前算出的即可 因为之前已经算了只用闪现走多远,那么只要判断如果这一秒不闪或者不停(因为跑步不耗蓝)是否比之前更优即可原创 2020-10-25 21:18:48 · 471 阅读 · 0 评论