洛谷 3628 APIO2010 特別行動隊

2021-09-29 06:10:22 字數 2173 閱讀 3501

題目描述

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

i+1,

...,

i+k)

(i,i+1,...,i+k)

(i,i+1

,...

,i+k

)的序列。 編號為 i 的士兵的初始戰鬥力為 x

ix_i

xi​ ,一支特別行動隊的初始戰鬥力 x 為隊內 士兵初始戰鬥力之和,即 x=x

i+xi

+1+.

..+x

i+

kx = x_i + x_ + ... + x_

x=xi​+

xi+1

​+..

.+xi

+k​。

通過長期的觀察,你總結出一支特別行動隊的初始戰鬥力 x 將按如下經驗公 式修正為 x′=

ax2+

bx+c

x^′=ax^2+b^x+c

x′=ax2

+bx+

c,其中 a, b, c 是已知的係數(a < 0)。 作為部隊統帥,現在你要為這支部隊進行編隊,使得所有特別行動隊修正後 戰鬥力之和最大。試求出這個最大和。

輸入格式

輸入由三行組成。第一行包含乙個整數 n,表示士兵的總數。第二行包含三 個整數 a, b, c,經驗公式中各項的係數。第三行包含 n 個用空格分隔的整數 x1,

x2,…

,x

nx_1, x_2, …, x_n

x1​,x2

​,…,

xn​,分別表示編號為 1,2

,…,n

1, 2, …, n

1,2,…,

n 的士兵的初始戰鬥力。

輸出格式

輸出乙個整數,表示所有特別行動隊修正後戰鬥力之和的最大值。

輸入輸出樣例

輸入 #1

4-1 10 -20

2 2 3 4

輸出 #1

9

說明/提示

100%的資料中,1 ≤ n ≤ 1,000,000,–5 ≤ a ≤ –1,|b| ≤ 10,000,000,|c| ≤ 10,000,000,1 ≤ xi ≤ 100

解釋:斜率優化,s[i

]>(f

[k]−

f[j]

+b∗s

[j]−

b∗s[

k]+a

∗s[k

]2−a

∗s[j

]2)/

((s[

j]−s

[k])

∗2∗a

)s[i]>(f[k]−f[j]+b∗s[j]−b∗s[k]+a∗s[k]2−a∗s[j]2)/((s[j]−s[k])∗2∗a)

s[i]

>(f

[k]−

f[j]

+b∗s

[j]−

b∗s[

k]+a

∗s[k

]2−a

∗s[j

]2)/

((s[

j]−s

[k])

∗2∗a

),其中s[i

]=∑i

=1ix

is[i]=\sum_^ix_i

s[i]=∑

i=1i

​xi​

直接上模板

#include#include#include#include#include#include#define n 1000050

#define int long long

using namespace std;

int a,b,c,n,l,r;

int d[n],s[n],f[n],q[n];

double c33(int j,int k)

signed main()l=1,r=1;

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

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

}

洛谷 P3628 APIO2010 特別行動隊

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

洛谷 P3628 APIO2010 特別行動隊

將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 然後斜率優化,單調佇列...

P3628 APIO2010 特別行動隊

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