codeforces 动态规划 100 题 30 天专项训练
当旅途结束时,我希望我们的回忆是充满快乐的~
Day 1
366C
思路
- 将比值约束 \(\frac{\sum\limits_{i_1,i_2,...,i_m\in\{1,2,...,n\}} a_{i_m}}{\sum\limits_{i_1,i_2,...,i_m\in\{1,2,...,n\}} b_{i_m}}=k\) 转化为线性约束 \(\sum\limits_{i_1,i_2,...,i_m\in\{1,2,...,n\}} a_{i_m}-kb_{i_m}=0\)。
- 状态 \(dp(i,st)\) 定义为:遍历前 \(i\) 个物品,此时 \(\sum\limits_{i_1,i_2,...,i_m\in\{1,2,...,n\}} a_{i_m}-kb_{i_m}=st\) 的最大美味和。
注意点
- 枚举状态和状态转移时都要考虑 \(st\) 的合法性。
- 不能从不合法的状态进行转移,会导致答案错误。
Day 2
340D
- 图 \(G\) 中 \(i\) 与 \(j\) 连边等价于 \(i<j,a_i>a_j\)。
- \(\forall G\),\(G\) 的最大独立集的大小等于补图 \(G'\) 的最大团的大小。
- 求最长上升子序列。