BZOJ 1911 APIO2010 特別行動隊

2021-08-06 05:11:43 字數 1071 閱讀 3908

題目描述

因為是從別人部落格裡斜率優化分類一欄找的題目,所以…這題被我秒了。

顯然先預處理字首和s(

i)=∑

ik=1

xi 設

d(i)

為將前i 個士兵分組的最大修正後戰鬥力。 d(

i)==

=max

maxm

ax+a

×s(i

)2+b

×s(i

)+c設

kixj

biyj

====

2a×s

(i)s

(j)d

(i)−

a×s(

i)2−

b×s(

i)−c

d(j)

+a×s

(j)2

−b×s

(j)

直線解析式為ki

xj+b

i=yj

其中斜率ki

單減,xj

單增。

**

#include

#include

#include

#define k(a) (2*a*s[a])

#define x(a) s[a]

#define b(a) (d[a]-a*s[a]*s[a]-b*s[a]-c)

#define y(a) (d[a]+a*s[a]*s[a]-b*s[a])

using

namespace

std;

const

int maxn=1000010;

long

long d[maxn],s[maxn];

int q[maxn],n,a,b,c;

double slope(int i,int j)

int main()

int head=0,tail=0;

for(int i=1;i<=n;i++)

cout

<

}

BZOJ1911 Apio2010 特別行動隊

有n個人,每個人都有乙個戰力值,將這n個人分成若干個段 每個段內的人的編號都是連續的 每個段的初始戰力值為每個段內的人的戰力值的總和 給出常數a,b,c,而每個段的真正戰力值為ax2 bx c x為這個段的初始戰力值 求出分成若干個段得到的所有段的最大真正戰力值總和 dp很容易想到 設f i 為將前...

bzoj1911 Apio2010 特別行動隊

題目鏈結 給出乙個序列,將序列分成連續的幾段,每段的價值為a s s b s c,其中a,b,c為給定常數,s為這一段中所有數之和。求最大價值和。斜率優化。dp方程 其中 為字首和,表示從1 i的最大價值。斜率式 所以決策 對映到平面直角座標系上就是 斜率 為正且單增 橫座標 單減 小於0,單增 所...

bzoj 1911斜率優化

這個題為什麼有個 關於斜率優化又有了新的感悟 對於次優解的排除 假設對於i來說l是次優解。即滿足k q l q l 1 k i 時,l 1比l更優 k q l q l 1 表示這兩個點連成一條線的斜率,k i 表示在i處那根線的斜率,這個很容易就可以證明 對於提前排除不可能的解 假設r是考慮排除的點...