bzoj1911 特別行動隊 斜率優化dp

2021-07-24 14:40:09 字數 738 閱讀 6340

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#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

#define maxn 1000100

#define file "read"

#define up(i,j,n) for(ll i=j;i<=n;i++)

ll n,a,b,c,l,r,x[maxn],sum[maxn],q[maxn],f[maxn];

namespace init

inline ll read()

while(isdigit(ch))

return x*f;

}}using namespace init;

inline double slop(ll j,ll k)

int main()

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

return 0;

}

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

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

BZOJ1911 特別行動隊

目錄題目傳送門 典型的斜率優化 dp 首先如果我們記 sum i 表示前 i 個士兵的戰鬥力之和,那麼我們比較容易的可以得出 o n 2 的 dp f i max f j a sum i sum j 2 b sum i sum j c 如果 k j 並且 k 比 j 更優,那麼可以得出 frac l...

bzoj 1911 特別行動隊

題意 將 n 個人分組,分組後,乙個組的戰鬥力等於 a sum sum b sum c,怎麼分組使得戰鬥力和最大。分析 第一次自己從頭到尾推出來的斜率dp。狀態定義 d i 前 i 個人分組得到的最優值。狀態轉移 d i max d j a sum i sum j 2 b sum i sum j c...