bzoj1911 Apio2010 特別行動隊

2022-05-21 14:00:13 字數 792 閱讀 6904

(題目鏈結)

給出乙個序列,將序列分成連續的幾段,每段的價值為a*s*s+b*s+c,其中a,b,c為給定常數,s為這一段中所有數之和。求最大價值和。

斜率優化。

dp方程:$$$$

其中$$為字首和,$$表示從1~i的最大價值。

斜率式:$$$$

所以決策$$對映到平面直角座標系上就是:$$。斜率:$$為正且單增;橫座標$$單減($$小於0,$$單增),所以單調佇列裡面的點長成這樣:

開long long。

// bzoj1911

#include#include#include#include#include#include#define ll long long

#define inf 1e18

#define pi acos(-1.0)

#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);

using namespace std;

const int maxn=1000010;

ll f[maxn],s[maxn],a,b,c;

int n,q[maxn];

double slope(int i,int j)

int main()

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

return 0;

}

BZOJ 1911 APIO2010 特別行動隊

題目描述 因為是從別人部落格裡斜率優化分類一欄找的題目,所以 這題被我秒了。顯然先預處理字首和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...

BZOJ1911 Apio2010 特別行動隊

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

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是考慮排除的點...