日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P3648-[APIO2014]序列分割【斜率优化】

發布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P3648-[APIO2014]序列分割【斜率优化】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/P3648


題目大意

nnn個數字的序列,分割kkk次,每次的權值是左右兩塊數字的乘積。求最大權值和分割方案。


解題思路

顯然分割順序不會影響結果,一個分割方式的答案是每一塊與其他塊的乘積之和。

考慮dpdpdpfi,jf_{i,j}fi,j?表示第iii次分割,到第jjj個時的方案數,有轉移
fi,j=max{fi?1,k+(sj?sk)?sk}f_{i,j}=max\{f_{i-1,k}+(s_j-s_k)*s_k\}fi,j?=max{fi?1,k?+(sj??sk?)?sk?}
考慮兩個方案k′<kk'<kk<k的優劣性
fi?1,k+sj?sk?sk2>fi?1,k′+sj?sk′?sk′2f_{i-1,k}+s_j*s_k-s_k^2>f_{i-1,k'}+s_j*s_{k'}-s_{k'}^2fi?1,k?+sj??sk??sk2?>fi?1,k?+sj??sk??sk2?
fi?1,k+sj?sk?fi?1,k′+sk′2>sj?(sk′?sk)f_{i-1,k}+s_j*s_k-f_{i-1,k'}+s_{k'}^2>s_j*(s_{k'}-s_{k})fi?1,k?+sj??sk??fi?1,k?+sk2?>sj??(sk??sk?)
fi?1,k+sj?sk?fi?1,k′+sk′2sk′?sk<sj\frac{f_{i-1,k}+s_j*s_k-f_{i-1,k'}+s_{k'}^2}{s_{k'}-s_{k}}<s_jsk??sk?fi?1,k?+sj??sk??fi?1,k?+sk2??<sj?
因為sjs_jsj?遞增,所以單調隊列維護一個上突殼即可

然后記錄一下前驅輸出方案
時間復雜度O(nk)O(nk)O(nk)


codecodecode

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=110000; ll n,k,q[N],fa[210][N],s[N],f[2][N]; double slope(ll z,ll x,ll y){if(s[y]==s[x])return -1e18;return (f[z][x]-f[z][y]-s[x]*s[x]+s[y]*s[y])/(double)(s[y]-s[x]); } int main() {scanf("%lld%lld",&n,&k);for(ll i=1;i<=n;i++)scanf("%lld",&s[i]),s[i]+=s[i-1];memset(f,0,sizeof(f));for(ll i=1;i<=k;i++){ll head=1,tail=0;memset(f[i&1],0,sizeof(f[i&1]));for(ll j=1;j<=n;j++){while(head<tail&&slope(~i&1,q[head],q[head+1])<=s[j])head++;f[i&1][j]=0;if(head<=tail){ll x=q[head];fa[i][j]=x;f[i&1][j]=f[~i&1][x]+(s[j]-s[x])*s[x];}while(head<tail&&slope(~i&1,q[tail],q[tail-1])>=slope(~i&1,j,q[tail]))tail--;q[++tail]=j;}}printf("%lld\n",f[k&1][n]);for(ll i=k,w=fa[k][n];i;w=fa[--i][w])printf("%lld ",w); }

總結

以上是生活随笔為你收集整理的P3648-[APIO2014]序列分割【斜率优化】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。