[APIO2014]序列分割 --- 斜率优化DP
2021-04-13 11:39
标签:AC space htm spl 游戏 main splay inline sid [APIO2014]序列分割 题目大意: 你正在玩一个关于长度为\(n\)的非负整数序列的游戏。这个游戏中你需要把序列分成\(k+1\)个非空的块。为了得到\(k+1\)块,你需要重复下面的操作\(k\)次: 选择一个有超过一个元素的块(初始时你只有一块,即整个序列) 选择两个相邻元素把这个块从中间分开,得到两个非空的块。 每次操作后你将获得那两个新产生的块的元素和的乘积的分数。你想要最大化最后的总得分。 \(n
首先划分完\(k\)块后,发现非常像线性DP模型 自然地想,是不是分数跟划的顺序无关? 可以证明是的(归纳法) 那么,设 \(dp(i,j)\)表示枚举到了\(i\),第\(1...i\)切了几刀的最大收益。 有\(dp(i,j)=max(dp(k,j-1)+sum[k]*(sum[i]-sum[k]))(1 那么展开式子,化为斜率优化的式子: \(-dp(k,j-1)=sum[k]*sum[i]-sum[k]^{2}-dp(i,j)\) 其中\(k\)为\(sum[k]\),单调递增 其中\(x\)为\(sum[i]\),单调递增 要使\(dp(i,j)\)最大,因此维护下凸包,那么可以使用单调队列 空间滚一下就好 空间复杂度:\(O(n)\)(忽略记录决策点) 时间复杂度:\(O(nk)\) 注:被宏定义坑了很久。。。 [APIO2014]序列分割 --- 斜率优化DP 标签:AC space htm spl 游戏 main splay inline sid 原文地址:https://www.cnblogs.com/reverymoon/p/8981610.html#include
文章标题:[APIO2014]序列分割 --- 斜率优化DP
文章链接:http://soscw.com/index.php/essay/75172.html