我也不知道有没有 2100,反正就拿来做了。顺便记录一下心得。
我也不知道是不是都是 DP,反正就拿来做了。现在发现有一些算不上 DP,不纯正属于是。
因为我才刷了一点点并且重心还在这上面,所以会持续更新。
CF16E Fish
- 状压 DP & 概率
枚举未知量,然后枚举谁吃了谁来转移。(假设 (i) 吃了 (j))
[f_S = sum_{j
otin S & i in S} f_{S mid j} imes a_{i,j} imes frac{1}{cnt imes (cnt + 1)}
]
(cnt) 表示的是 (S) 中 (1) 的数量。
CF14D Two Paths
- 树的直径
题目要求树上两路径乘积的 (max)。
本身好像并不可做。但是 (n) 很小,可以暴力断边,然后对两棵树分别求树的直径找最大乘积。
好像有换根 DP 的线性做法,感觉很牛逼,但是我不会。
CF930C Teodor is not a liar!
- 最长上升子序列
显然你需要知道一个点被多少线段覆盖。这个可以差分维护。
然后你开始手模样例,你想知道什么情况下可以知道所有点都不能被所有线段覆盖。
然后你发现,如果一段选取的序列中存在两个峰,那它是不合法的。
所以你猜所有合法的序列一定是一个单峰的,然后从前往后从后往前搞一个最长上升子序列就做完了。
我不会最长上升子序列 (O(n log n)) 做法,所以我用了线段树。
CF936B Sleepy Game
- tarjan, dfs
具体情况看我写的题解吧,我累了。