20200309 DP笔记【杂题,笛卡尔树】

杂题:
  1. AGC 034 E
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. CF 908 G
    在这里插入图片描述
    分开计算每个数字的贡献,即 ∑ d = 1 9 d ∗ v a l ( d ) \sum_{d=1}^9d*val(d) d=19dval(d),其中 v a l ( d ) val(d) val(d) ∑ 1 0 i \sum10^i 10i的形式,直接数位DP需要知道大于和等于 d d d的个数,复杂度较高。改为求 ∑ d = 1 9 ∑ i = d 9 v a l ( i ) \sum_{d=1}^9\sum_{i=d}^9val(i) d=19i=d9val(i),枚举 d d d,就只需要知道大于等于 d d d的个数 k k k,贡献就是 ∑ j = 0 k − 1 1 0 j \sum_{j=0}^{k-1}10^j j=0k110j,数位DP就变成了 O ( n 2 ∗ 9 ∗ 2 ∗ 9 ) O(n^2*9*2*9) O(n2929).
    cnblogs题解.

  3. AGC 024 F
    在这里插入图片描述
    总串数是 O ( 2 N ) O(2^N) O(2N)级别。考虑对于每个串,计算它是集合中多少个串的子序列。
    题解
    在这里插入图片描述
    在这里插入图片描述

  4. 「清华集训 2017」. 某位歌姬的故事
    在这里插入图片描述
    在这里插入图片描述
    cnblogs题解

笛卡尔树DP:
  1. BZOJ 4380
    在这里插入图片描述
    · 首先将权值离散化。 n n n很小,所以我们可以直接将状态设为 F [ i ] [ j ] [ k ] F[i][j][k] F[i][j][k]表示区间为 [ i , j ] [i,j] [i,j]最小值为 k k k的最大收益(只考虑 i ≤ a ≤ b ≤ j i\le a\le b\le j iabj的人)。
    · 转移时枚举最小值的位置 x x x,那么就可以用 F [ i ] [ x − 1 ] [ p ≥ k ] + F [ x + 1 ] [ j ] [ q ≥ k ] + C o s t ( i , j , k , x ) F[i][x-1][p\ge k]+F[x+1][j][q\ge k]+Cost(i,j,k,x) F[i][x1][pk]+F[x+1][j][qk]+Cost(i,j,k,x)来更新答案,其中 C o s t ( i , j , k , x ) Cost(i,j,k,x) Cost(i,j,k,x)表示 i ≤ a ≤ x ≤ b ≤ j i\le a\le x\le b\le j iaxbj的人在价格为 k k k的店洗车的收益之和,可以在枚举 x x x的时候弹队列实现,也可以高维前缀和实现。 F F F用一个简单的后缀max即可。
    · 复杂度 O ( n 3 m ) O(n^3m) O(n3m)

  2. BZOJ 2616
    在这里插入图片描述
    算得上笛卡尔板子题了吧。。题解

  3. AGC 026 D
    在这里插入图片描述
    先考虑矩形的情况。
    · 分析2*2的格子恰好两红两蓝的条件:先确定第一行的颜色,如果设第二行的颜色为第一行的反色,显然是可以的。如果第一行存在两个相邻格子颜色相同,那么反色将是唯一的可行方案(从相同处往两边延伸可得)。如果不存在,那么除了反色之外,第二行与第一行完全相同也是一种可行方案。
    · 然后就DP区间记录存在相邻格子颜色相同和不存在的方案数,用solve(l,r,k)表示解决区间 [ l , r ] [l,r] [l,r] k k k以上的部分,每次对于这段区间把下面整块矩形的部分砍掉,上面部分递归处理。代码实现见:bestfy’s blog

  4. LOJ 2743 摩天大楼 (BZOJ 4664: Count)
    在这里插入图片描述
    分段DP,分步贡献。题解
    这题好像跟笛卡尔树没太大关系,就是合并两个段的时候形成了笛卡尔树的一棵子树(没什么用)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值