將n個士兵分為若干組,每組連續,編號為i的士兵戰鬥力為xi
若i~j士兵為一組,該組初始戰鬥力為\( s = \sum\limits_^xk \),實際戰鬥力\(a * s^2 + b * s + c\)(a,b,c為常數)
求最大實際戰鬥力
\( dp[i] = max(dp[j) + a * (s[i] - s[j]) ^ 2 + b * (s[i] - s[j]) + c \)
然後斜率優化,單調佇列維護
#include using namespace std;
typedef long long ll;
int n, l, h, t, a, b, c;
int q[1000010];
ll sum[1000010], dp[1000010];
ll sqr(ll x)
int s1(int x)
int s2(int x)
int s4(int x)
double calc(int i, int j)
int main()
h = t = 1;
for (register int i = 1; i <= n; ++i)
printf("%lld\n", dp[n]);
}
洛谷 P3628 APIO2010 特別行動隊
題目描述 你有一支由 n 名預備役士兵組成的部隊,士兵從 1 到 n 編號,要將他們拆分 成若干特別行動隊調入戰場。出於默契的考慮,同一支特別行動隊中隊員的編號 應該連續,即為形如的序列。編號為 i 的士兵的初始戰鬥力為 xi 一支特別行動隊的初始戰鬥力 x 為隊內 士兵初始戰鬥力之和,即 通過長期...
P3628 APIO2010 特別行動隊
題目描述 你有一支由 n 名預備役士兵組成的部隊,士兵從 1 到 n 編號,要將他們拆分 成若干特別行動隊調入戰場。出於默契的考慮,同一支特別行動隊中隊員的編號 應該連續,即為形如的序列。編號為 i 的士兵的初始戰鬥力為 xi 一支特別行動隊的初始戰鬥力 x 為隊內 士兵初始戰鬥力之和,即 通過長期...
P3628 APIO2010 特別行動隊
轉移方程 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 最大值,於是維護上凸包 橫座標單調增,斜率單調減,所以直接上單調佇列即可。in...