P3628 APIO2010 特別行動隊

2022-03-30 07:06:31 字數 620 閱讀 6406

轉移方程:\(f[i]=\max(f[j]+a*(s[i]-s[j])^2+b*(s[i]-s[j])+c)\)

寫成可以斜率優化的式子:\(f[j]+a*s[j]^2-b*s[j]+c=2*a*s[i]*s[j]+f[i]-a*s[j]^2-b*s[i]\)

然後求\(f[i]\)最大值,於是維護上凸包;橫座標單調增,斜率單調減,所以直接上單調佇列即可。

#include#include#define r register int

#define ll long long

using namespace std;

namespace luitaryi const int n=1e6+10;

int n,a,b,c,h=0,t=0,q[n];

ll s[n],f[n];

inline double x(int i)

inline double y(int i)

inline double k(int i,int j)

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

}} signed main()

2019.08.16

84

P3628 APIO2010 特別行動隊

題目描述 你有一支由 n 名預備役士兵組成的部隊,士兵從 1 到 n 編號,要將他們拆分 成若干特別行動隊調入戰場。出於默契的考慮,同一支特別行動隊中隊員的編號 應該連續,即為形如的序列。編號為 i 的士兵的初始戰鬥力為 xi 一支特別行動隊的初始戰鬥力 x 為隊內 士兵初始戰鬥力之和,即 通過長期...

P3628 APIO2010 特別行動隊

令 f i 表示前 i 個士兵組成特別行動隊的最大修正戰鬥力之和。對 x 做一遍字首和。轉移方程 f i max x i 兩個負的負負得正不用變號。因為 x i 隨著 i 的增大單調遞增,所以對 2a times x,f a times x 2 b times x 維護下凸包。code includ...

P3628 APIO2010 特別行動隊

你有一支由 n 名預備役士兵組成的部隊,士兵從 1 到 n 編號,要將他們拆分 成若干特別行動隊調入戰場。出於默契的考慮,同一支特別行動隊中隊員的編號 應該連續,即為形如 i,i 1,i k 的序列。編號為 i 的士兵的初始戰鬥力為 xi 一支特別行動隊的初始戰鬥力 x 為隊內 士兵初始戰鬥力之和,...