這題依舊是斜率優化dp。
首先我們可以發現,它的分割順序對答案沒有影響:
假設我們要將一塊分為三部分,每部分的和分別為a,b,c
a * (b+c)+b * c=a * b+a * c+b * c
(a+b) * c+a * b=a * c+b * c+a * b
所以,我們可以按順序分了。
dp式:
斜率優化,我們可以得出:
上標:
#include
#define db double
#define ll long long
#define n 100010
using namespace std;
int n,k,g[n]
,l,len,x,las;
ll f[2]
[n],a[n]
;inline
intread()
db solve
(int x,
int y)
intmain()
las=x;
}printf
("%lld\n"
,f[las]
[n])
;return0;
}
bzoj3675 APIO2014 序列分割
time limit 40 sec memory limit 128 mb submit 1468 solved 607 submit status discuss 小h最近迷上了乙個分隔序列的遊戲。在這個遊戲裡,小h需要將乙個長度為n的非負整數序列分割成k 1個非空的子串行。為了得到k 1個子序列...
BZOJ3675 Apio2014 序列分割
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...
BZOJ 3675 Apio2014 序列分割
bzoj 3675 apio2014 序列分割 小h最近迷上了乙個分隔序列的遊戲。在這個遊戲裡,小h需要將乙個長度為n的非負整數序列分割成k 1個非空的子串行。為了得到k 1個子序列,小h需要重複k次以下的步驟 1.小h首先選擇乙個長度超過1的序列 一開始小h只有乙個長度為n的序列 也就是一開始得到...