特別行動隊 斜率優化

2022-04-28 20:06:15 字數 557 閱讀 6776

apio2010特別行動隊

令s為字首和,那麼n方dp:

f[i]=max;

展開,移項得到:

f[j]+a*s[j]*s[j]=(2*a*s[i]+b)s[j]+f[i]- a*s[i]*s[i]-b*s[i]-c。

即以f[j]+a*s[j]*s[j]為y,s[j]為x的一次函式,用斜率優化。

因為斜率單調遞減,所以維護乙個單調遞減的上凸殼即可。

il db y(int x) 

il db slope(

int x,int y)

while (l2*a*s[i]+b<=slope(q[l+1],q[l])) ++l;

f[i]=f[q[l]]+a*(s[i]-s[q[l]])*(s[i]-s[q[l]])+b*(s[i]-s[q[l]])+c;

while (l=slope(q[r],q[r-1])) --r;

q[++r]=i;

其實我們也可以把常數項b與s[j]的乘積也丟到y那邊,斜率就變成了2*a*s[i],也是可以的,大家可以自己試試。

apio2010特別行動隊(斜率優化)

這題是上凸形,題目當中,還是要注意括號的問題。因為括號套錯了一層re了好幾次 關於,斜率優化,感覺一般的常數項,和i有關的就都放在右邊吧,比如已知的那些常量,由此盡量保證左邊的上下分子分母都是正的應該是好處理吧 感覺 斜率優化,推出的方程,是大於號,那麼上凸,維護斜率遞減。小於號,下凸,維護斜率遞增...

BZOJ 1911 特別行動隊 (斜率優化)

感覺這道題目還是比較常規的,首先我們很容易想到dp,因為題目裡面說了選出的人都是連續的,這意味著我們可以從前往後dp。我們直接設 f i 表示前 i 在分組之後的戰鬥力之和 因為題目沒有明確要求分幾組,所以我們省去這一維度 然後轉移也比較常規,我們列舉前面的某乙個人 k 作為這一組人的左端點 右端點...

bzoj1911 特別行動隊 斜率優化dp

ac通道 題解 首先很容易想到用字首和,下面的sum表示字首和。然後寫出狀態轉移方程 f i max 假設j比k更優,得到斜率表示式 f j a sum j 2 b sum j f k a sum k 2 b sum k sum j sum k 2a sum i 然後斜率優化走起。include i...