基础DP
闲着没事来水一些入门知识吧
所谓基础DP,就是不需要太多套路和优化方式的DP。只要理解DP的思想,这些题目都可以做出来。亦可以通过这些题目体会DP的思想,可以锻炼思维。
P1077 摆花
\(f_{i,j}\) 表示决策完第 \(i\) 种,摆完 \(j\) 盆的方案数
\(f_{i,j}=\sum f_{i-1,j-k},\ k\in[0,\min(a_i,j)]\)
状态 \(O(n^2)\) 转移 \(O(n)\) \(\Longrightarrow\) 时间复杂度为 \(O(n^3)\)
优化提示:可以使用滚动数组优化空间,前缀和优化时间至 \(O(n^2)\)
P3842 线段
\(f_{i,0}\) 表示走完第 \(i\) 行线段并在左端点结束花费最小步数
\(f_{i,1}\) 表示走完第 \(i\) 行线段并在右端点结束花费最小步数
向下走一步的花费为 \(1\),于是有
\(f_{i,0}=\min(f_{i-1,0}+|R_i-L_{i-1}|,f_{i-1,1}+|R_i-R_{i-1}|)+R_i-L_i+1\)
\(f_{i,1}=\min(f_{i-1,0}+|L_i-L_{i-1}|,f_{i-1,1}+|L_i-R_{i-1}|)+R_i-L_i+1\)
状态复杂度 \(O(n)\) \(O(1)\) 转移 \(\Longrightarrow\) 时间复杂度 \(O(n)\)
P1095 守望者的逃离
这题我其实不愿称之为DP ,包含了一些贪心性质
闪现的平均速度 \(v_1=\frac{\frac{4\times 5}{10}\times 60}{5+2}=\frac{120}{7}\)
走路的平均速度\(v_2=17<\frac{120}{7}\)
故而总是等待蓝回够再闪现是最优的,于是有这样一种策略:
先把所有技能交了,然后一直等蓝回够再闪,直到剩下的时间不足以回满一个蓝,选择走路
记录一个动态的 \(m\) 表示当前的蓝剩余量,\(f_{i}\) 表示按照上述策略闪现到第 \(i\) 秒的距离
问题就是从哪里开始走,
在两次闪现之间,\(f_{i-1}+17\) 一定比 \(f_i\) 更优,因为此时闪现方案会停下等蓝
但到了闪现时间点这个差距就会被追回来,所以我们可以第二次扫描当 \(f_{i-1}+17>f_i\) 直接决策,不会影响后续答案。
P4059 找爸爸
很容易发现,两段序列不可能在同一位置增加空格,因为同时删掉两个空格后显然会更优。
所以,任何一个位置一定有至少一个碱基。
\(f_{i,j,k}\) 表示已经配对串一中的 \(i\) 个碱基,串二中的 \(j\) 个碱基。\(k\) 表示状态,
\(0\) 表示两个串末尾都不是空格, \(1\) 表示串一末尾有空格,\(2\) 则表示串二。
答案为 \(\max\{f_{n,m}\}\)
P7074 CSP-J2020 方格取数
对于到达一个格子只有三种方向可能。对于向右走的,我们不用记录作为状态。
\(f_{i,j,k}\) 表示走到点 \((i,j)\),状态为 \(k\) 的最大值。
其中 \(0\) 表示向下走,\(1\)表示向上走

浙公网安备 33010602011771号