「USACO 2019.12 Platinum」题解

Greedy Pie Eaters

考虑将每个区间对应一个贡献,不存在的贡献为 0 0 0即可
那么最后一定恰好吃掉 n n n个派,每只吃掉一个
f l , r f_{l,r} fl,r表示将 [ l , r ] [l,r] [l,r]吃完的最大代价
那么枚举中间的一个
f l , r = max ⁡ l ≤ k ≤ r ( f l , k − 1 + f k + 1 , r + g l , r , k ) f_{l,r}=\max_{l\le k\le r}(f_{l,k-1}+f_{k+1,r}+g_{l,r,k}) fl,r=maxlkr(fl,k1+fk+1,r+gl,r,k)
g l , r , k = max ⁡ l ≤ a ≤ k ≤ b ≤ r A [ a ] [ b ] g_{l,r,k}=\max_{l\le a\le k\le b\le r}A[a][b] gl,r,k=maxlakbrA[a][b]

O ( n 3 ) O(n^3) O(n3)区间 D P DP DP即可

code

Bessie’s Snow Cow

考虑对于每种颜色用 s e t set set分别维护颜色覆盖的区间
每次插入一段区间后将联通区间并起来
用树状数组维护区间加区间求和
这样复杂度均摊 O ( n l o g n ) O(nlogn) O(nlogn)

code

Tree Depth

考虑逆序对 D p Dp Dp的生成函数
就是 ∏ j = 1 n ( ∑ i = 1 j − 1 x i − 1 ) = ∏ j = 1 n 1 − x j 1 − x \prod_{j=1}^n(\sum_{i=1}^{j-1}x^{i-1})=\prod_{j=1}^n\frac{1-x^j}{1-x} j=1n(i=1j1xi1)=j=1n1x1xj

这样可以简单求出 k k k个的方案数
再考虑如何求深度
考虑枚举 j j j,求 j j j i i i的贡献
首先 p j = m i n k ∈ [ i , j ] ( p k ) p_j=min_{k\in[i,j]}(p_k) pj=mink[i,j](pk)时才有贡献
如果 j < i , j<i, j<i那么 j j j i i i j j j不会贡献任何一个逆序对
如果 j > i j>i j>i,那么中间会形成 ∣ j − i ∣ |j-i| ji个逆序对
先把中间 j j j的贡献除去,即除以 1 − x ∣ i − j ∣ + 1 1 − x \frac{1-x^{|i-j|+1}}{1-x} 1x1xij+1,再乘上 1 或 x ∣ i − j ∣ 1或x^{|i-j|} 1xij

code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值