BZOJ3675 Apio2014 序列分割

2021-07-27 06:48:52 字數 1217 閱讀 2095

portal

根據乘法分配律,其實最後答案就是分割後,對每個塊的和,兩兩求乘積加和。

那麼割的順序就沒有影響了。

遞推式可以寫成 f[

i][k

]=mi

n(f[

j][k

−1]+

(sum

[i]−

sum[

j])∗

sum[

j])

那麼對於k>j且決策k優於決策j f[

k][l

−1]+

(sum

[i]−

sum[

k])∗

sum[

k]>f[

j][l

−1]+

(sum

[i]−

sum[

j])∗

sum[

j] s

um[i

]>f[

j][l

−1]−

f[k]

[l−1

]+su

m[k]

²−su

m[j]

²sum

[k]−

sum[

j]因為a中可能有零,而0對答案沒有任何貢獻和影響,為了後面方便,直接去掉就好了

顯然具有決策單調性,就可以斜率優化啦!

然而這個題卡空間!需要滾動陣列優化一下。

外層迴圈從小到大列舉分割的次數k,內層維護每個位置i,分割k次的最大值。

斜率優化搞一搞就好了

#include 

#include

#include

#define inf 1000000001

#define n 100005

using namespace std;

typedef long long ll;

intread()

while(isdigit(ch))

return

x*f;

}int n,m,l,r,now;

int a[n],sum[n],q[n];

ll f[n][2];

double slope(int j,int k)

int main()

}printf("%lld\n",f[n][now]);

return

0;}

bzoj3675 APIO2014 序列分割

time limit 40 sec memory limit 128 mb submit 1468 solved 607 submit status discuss 小h最近迷上了乙個分隔序列的遊戲。在這個遊戲裡,小h需要將乙個長度為n的非負整數序列分割成k 1個非空的子串行。為了得到k 1個子序列...

BZOJ 3675 Apio2014 序列分割

bzoj 3675 apio2014 序列分割 小h最近迷上了乙個分隔序列的遊戲。在這個遊戲裡,小h需要將乙個長度為n的非負整數序列分割成k 1個非空的子串行。為了得到k 1個子序列,小h需要重複k次以下的步驟 1.小h首先選擇乙個長度超過1的序列 一開始小h只有乙個長度為n的序列 也就是一開始得到...

BZOJ3675 Apio2014 序列分割

description 小h最近迷上了乙個分隔序列的遊戲。在這個遊戲裡,小h需要將乙個長度為n的非負整數序列分割成k 1個非空的子串行。為了得到k 1個子序列,小h需要重複k次以下的步驟 1.小h首先選擇乙個長度超過1的序列 一開始小h只有乙個長度為n的序列 也就是一開始得到的整個序列 2.選擇乙個...