【学习笔记】dp 基本模型

可能还是以一些偏思维的 dp 为主 。

可能会做的很慢 。

Two Merged Sequences

  • 发现自己写丑了。 O ( n ) → O ( n log ⁡ n ) O(n)\to O(n\log n) O(n)O(nlogn) 。于是重新写了 O ( n ) O(n) O(n) 的做法 因为下一道题要用

Madoka and Laziness

我要谴责翻译的人,这里的点对表示的是山顶的位置 。

假设 a [ p o s ] a[pos] a[pos] 最大,那 p o s pos pos 前面肯定是递增, p o s pos pos 后面是递减

但是还不够。再枚举 p p p ,我们假设 p > p o s p>pos p>pos (反转序列再做一遍即可)

画图理解,对于 [ 1 , p o s ] [1,pos] [1,pos] split 成两个单增序列, [ p o s , p ] [pos,p] [pos,p] split 成单增序列 + 单减序列, [ p o s , n ] [pos,n] [pos,n] split 成两个单减序列 。

枚举 p p p 统计答案 。水题不说了不说了 。

Weighted Increasing Subsequences

3200 的评分虚高 。

考虑 i i i 对答案的贡献

p i p_i pi 为满足 a j > a i a_j>a_i aj>ai 的最大的 j j j

d p i dp_i dpi 表示以 i i i 开头的上升子序列方案数

g i g_i gi 表示以 i i i 开头的 e n d p o s < p i endpos< p_i endpos<pi 的上升子序列方案数

d p i ′ dp'_i dpi 表示以 i i i 结尾的上升子序列的方案数

答案是 ∑ i = 1 n d p i ′ × g i \sum_{i=1}^ndp'_i \times g_i i=1ndpi×gi

画图理解一下

得到转移式子 g i = ∑ j = i + 1 p i − 1 d p j [ a j ≥ a p i ] + g j [ a i < a j < a p i ] + 1 g_i=\sum_{j=i+1}^{p_i-1}dp_j[a_j\ge a_{p_i}]+g_j[a_i<a_j<a_{p_i}]+1 gi=j=i+1pi1dpj[ajapi]+gj[ai<aj<api]+1

码码码。。。

呼。码完了。。。

MEX counting

posted @ 2022-07-07 21:06  仰望星空的蚂蚁  阅读(25)  评论(0)    收藏  举报  来源