codeforces 2100左右的dp题 泛刷

题单地址

我也不知道有没有 2100,反正就拿来做了。顺便记录一下心得。

我也不知道是不是都是 DP,反正就拿来做了。现在发现有一些算不上 DP,不纯正属于是。

因为我才刷了一点点并且重心还在这上面,所以会持续更新。

CF16E Fish

  • 状压 DP & 概率

枚举未知量,然后枚举谁吃了谁来转移。(假设 \(i\) 吃了 \(j\)

\[f_S = \sum_{j \not\in S \& i \in S} f_{S \mid j} \times a_{i,j} \times \frac{1}{cnt \times (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

具体情况看我写的题解吧,我累了。

posted @ 2021-09-21 22:22  Suzt_ilymtics  阅读(105)  评论(0编辑  收藏  举报