APIO2010 特別行動隊

2022-05-11 03:01:55 字數 2335 閱讀 2163

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

編號為 $i$的士兵的初始戰鬥力為 $x_i$,一支特別行動隊的初始戰鬥力 $x$為隊內士兵初始戰鬥力之和,即 $x = x_i + x_ + \cdots + x_$。

通過長期的觀察,你總結出對於一支初始戰鬥力為 $x$的特別行動隊,其修正戰鬥力 $x'= ax^2+bx+c$,其中 $a,~b,~c$是已知的係數$(a < 0)$。 作為部隊統帥,現在你要為這支部隊進行編隊,使得所有特別行動隊的修正戰鬥力之和最大。試求出這個最大和。

輸入的第一行是乙個整數 $n$,代表士兵的人數。

輸入的第二行有三個用空格隔開的整數,依次代表 $a,~b,~c$,即修正戰鬥力的係數。

輸入的第三行有$n$個用空格隔開的整數,第 $i$個整數代表編號為 $i$的士兵的初始戰鬥力$x_i$。

輸出一行乙個整數,代表最大的所有特別行動隊戰鬥力之和。

輸入

4 

-1 10 -20

2 2 3 4

輸出9

樣例輸入輸出 1解釋

你有 $4$名士兵,$x_1 = 2,~x_2 = 2,~x_3 = 3,~x_4=4$。修正戰鬥力公式中的引數為 $a = -1,~b = 10,~c = -20$。

此時,最佳方案是將士兵組成 $3$個特別行動隊:第一隊包含士兵 $1$和士兵 $2$,第二隊包含士兵 $3$,第三隊包含士兵 $4$。特別行動隊的初始戰鬥力分別為 $4,~3,~4$,修正後的戰鬥力分別為 $-4^2 + 10 \times 4 -20 = 4$,$-3^2 - 10 \times 3 - 20 = 1$,$-4^2 + 10 \times 4 -20 = 4$。修正後的戰鬥力和為 $4 + 1 + 4 = 9$,沒有其它方案能使修正後的戰鬥力和更大。

資料範圍與約定

對於 $20\%$的資料,$n \leq 10^3$。

對於 $50\%$的資料,$n \leq 10^4$

對於 $100\%$的資料,$1 \leq n \leq 10^6$,$-5 \leq a \leq -1$,$-10^7 \leq b \leq 10^7$,$-10^7 \leq c \leq 10^7$,$1 \leq x_i \leq 100$。

這道題應該是比較板的斜優了。

首先把$dp$式子寫起來,設$f\left [ i \right ]$表示$1$到$i$分成若干組的最大戰鬥力。所以:

$$f\left [ i \right ]= \max\left \+b

\times \left ( sum\left [ i \right ] -sum\left [ j \right ]\right ) + c \right \}$$

其中$j< i$。

把$\max$去掉。因為我們要求的是$f[i]$,所以我們把已知的有關$j$的項都移到等式左邊去,含$i$的未知的項都丟到右邊,所以化出來就是這樣:

$$f[j]+a \times sum[j]^2-b \times sum[j]=sum[i] \times (2 \times sum[j] \times a-b-a \times sum[i])+f[i]-c$$

所以$y=f[j]+a \times sum[j]^2-b \times sum[j]$,$k=sum[i] $,$x=2 \times sum[j] \times a-b-a \times sum[i]$,$b=f[i]-c$。

因為我們之前求的$f[j]$是最大的,而這條直線的斜率是一定的,所以當$y$最大時,截距也最大,因為$c$是一定的,所以此時$f[i]$也最大。

因為$sum[i]$是單調遞增的,所以斜率是單調遞增的,所以直接用單調佇列維護即可。

1 #include2

using

namespace

std;

3const

int n=1e6+10;4

long

long n,sum[n],x[n],l=1,r=1

,q[n];

5long

long

f[n],a,b,c;

6long

double slop(long

long i,long

longj)9

intmain()

16 q[1]=0;17

for(long

long i=1;i<=n;i++)

23 printf("

%lld\n

",f[n]);

24return0;

25 }

APIO2010 特別行動隊

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

APIO2010 特別行動隊

dp方程 dp i max dp i dp j a sum i sum j 2 b sum i sum j c 暴力還是可以過一些點的 不止20pts 甚至有人說他暴力水過去了。我們現在考慮正解,正解還是斜率優化。維護乙個上凸包qwqwq 設 dp i 表示到士兵i所能達到的最大戰力,sum i 表...

APIO2010 特別行動隊

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