随笔分类 - 简单dp
动态规划
摘要:题解:又是dp想不出来的。\(dp_{i, j}\) 代表了,第 \(i\) 位时(从左到右),余数为 \(j\) 的数量。然后发现,状态转移的时候,如果 \(s_i = ?\) 则 \(dp_{i,(j * 10 + k) \% 13} =\sum dp_{i-1, (j * 10 + k) \%
阅读全文
摘要:题意:给一张有向简单图,给出邻接矩阵,求长度为 \(K\) 的路径条数,答案对 \(10^9+7\) 取模。 题解: 代码: #include <algorithm> #include <cmath> #include <cstdio> #include <cstring> #include <bi
阅读全文
摘要:原题链接 题意:如果 \(A_i\) 和 \(A_j\) 同色,那么必须满足 \(i < j\) 并且 \(A_i < A_j\),求最小的颜色来涂满整个序列。 题解:很显然的是,要求最长不上升子序列,然后因为只能求最长上升子序列,和最长不下降子序列,然后又已知结论最长不上升子序列又是可以转化为,原
阅读全文
摘要:$O(nlogn)$LIS $nlogn$做法 维护$dp$数组使得每次加入元素,如果是大于$dp$数组尾部,那么直接加到最后面,如果不是,那么加入到对答案影响最好的位置,就是严格大于的下一个位置,插入时用二分查找可降低至$log$。 如果要记录路径,那么就可以每次从$a$数组里加入到$dp$中时,
阅读全文
摘要:简单动态规划 前言 简单的动态规划其实并不是很难,在初期确实感觉无从下手,就是感觉为什么明明很简单却总是做不出来,其实就是对动态规划的本质理解较差,从而很难推断出状态方程进行转移,或者找到突破点,其实如果是没有算法的简单动态规划,题做多了就容易找到感觉了。 做题通法 首先找最初始状态,然后寻找一下其
阅读全文