考虑将每个区间对应一个贡献,不存在的贡献为
0即可
那么最后一定恰好吃掉
n个派,每只吃掉一个
设
fl,r表示将
[l,r]吃完的最大代价
那么枚举中间的一个
有
fl,r=maxl≤k≤r(fl,k−1+fk+1,r+gl,r,k)
gl,r,k=maxl≤a≤k≤b≤rA[a][b]
O(n3)区间
DP即可
code
考虑对于每种颜色用
set分别维护颜色覆盖的区间
每次插入一段区间后将联通区间并起来
用树状数组维护区间加区间求和
这样复杂度均摊
O(nlogn)
code
考虑逆序对
Dp的生成函数
就是
∏j=1n(∑i=1j−1xi−1)=∏j=1n1−x1−xj
这样可以简单求出
k个的方案数
再考虑如何求深度
考虑枚举
j,求
j对
i的贡献
首先
pj=mink∈[i,j](pk)时才有贡献
如果
j<i,那么
j到
i中
j不会贡献任何一个逆序对
如果
j>i,那么中间会形成
∣j−i∣个逆序对
先把中间
j的贡献除去,即除以
1−x1−x∣i−j∣+1,再乘上
1或x∣i−j∣
code