P3648 [APIO2014]序列分割 斜率优化
2021-02-08 08:15
标签:str == main double lld printf ++ 切割 define 好的先把自己的式子推了出来: 2019.08.17 P3648 [APIO2014]序列分割 斜率优化 标签:str == main double lld printf ++ 切割 define 原文地址:https://www.cnblogs.com/Jackpei/p/11366957.html题解:斜率优化\(DP\)
提交:\(2\)次(特意没开\(long\ long\),然后就死了)
题解:
朴素:
定义\(f[i][j]\)表示前\(i\)个数进行\(j\)次切割的最大得分,\(s[i]\)为前缀和
那么转移方程为:
\(f[i][j]=\max(f[i-1][j]+s[j]*(s[i]-s[j]))\)
优化一下(省掉第一维):
\(f[i]=\max(mem[j]+s[j]*(s[i]-s[j])\),\(f[j])\),\(mem[j]\)相当于\(f[i-1][j]\)
换成斜率优化的式子:
\(mem[j]-s[j]^2=-s[i]*s[j]+f[i]\)
求\(f[i]\)最大值,所以维护上凸包;斜率\(-s[i]\)单调递减,所以一个单调队列维护凸包。
然后康了一眼别人的题解:维护下凸包?
???黑人问号.jpg
后来发现自己就是个傻子:自己的是对的,只不过斜率那里和他们的相比少乘了个\(-1\)
\(ou\)。。那就没事了
(所以我写的还是自己的)#include
83
文章标题:P3648 [APIO2014]序列分割 斜率优化
文章链接:http://soscw.com/index.php/essay/52552.html