2017-09-10
你有一支由 n 名預備役士兵組成的部隊,士兵從 1 到 n 編號,要將他們拆分 成若干特別行動隊調入戰場。出於默契的考慮,同一支特別行動隊中隊員的編號 應該連續,即為形如(i, i + 1, ..., i + k)(i,i+1,...,i+k)的序列。 編號為 i 的士兵的初始戰鬥力為 xi ,一支特別行動隊的初始戰鬥力 x 為隊內 士兵初始戰鬥力之和,即 x = x_i + x_ + ... + x_x=xi+xi+1+...+xi+k。
通過長期的觀察,你總結出一支特別行動隊的初始戰鬥力 x 將按如下經驗公 式修正為 x':x' = ax2 + bx + c,其中 a, b, c 是已知的係數(a < 0)。 作為部隊統帥,現在你要為這支部隊進行編隊,使得所有特別行動隊修正後 戰鬥力之和最大。試求出這個最大和。
例如,你有 4 名士兵, x_1 = 2, x_2 = 2, x_3 = 3, x_4 = 4x1=2,x2=2,x3=3,x4=4。經驗公式中的引數為 a = –1, b = 10, c = –20。此時,最佳方案是將士兵組成 3 個特別行動隊:第一隊包含士兵 1 和士兵 2,第二隊包含士兵 3,第三隊包含士兵 4。特別行動隊的初始戰鬥力分 別為 4, 3, 4,修正後的戰鬥力分別為 4, 1, 4。修正後的戰鬥力和為 9,沒有其它 方案能使修正後的戰鬥力和更大。
輸入格式:
輸入由三行組成。第一行包含乙個整數 n,表示士兵的總數。第二行包含三 個整數 a, b, c,經驗公式中各項的係數。第三行包含 n 個用空格分隔的整數 x_1, x_2, …, x_n,分別表示編號為 1, 2, …, n 的士兵的初始戰鬥力。
輸出格式:
輸出乙個整數,表示所有特別行動隊修正後戰鬥力之和的最大值。
特別小豆隊》
input
4 -1 10 -20
2 2 3 4
out(int)⑨
20%的資料中,n ≤ 1000;
50%的資料中,n ≤ 10,000;
100%的資料中,1 ≤ n ≤ 1,000,000,–5 ≤ a ≤ –1,|b| ≤ 10,000,000,|c| ≤ 10,000,000,1 ≤ xi ≤ 100
我有很快的斜率優化式子hhh,
最後是這個(f[j]-f[k])+a*(sum[j]^2-sum[k]^2)+b*(sum[k]-sum[j]) /a/(sum[j]-sum[k]) < 2*sum[i] (j>k&&j比k優)
#include#includes_a_b_e_r#include
#include
#define ll long long
#define ld double
const
int maxn=1000000+9999
;using
namespace
std;
intread()
while('0'
<=ch&&ch<='9')
return an*f;
}int
q[maxn],a[maxn],sum[maxn];
ll dp[maxn];
inta,b,c,l,r,n;
ll sq(ll x)
ld judge(
int k,int
j)int
main()
cout
<
return0;
}
by:s_a_b_e_r
u盤裡至今沒刪的東西
a[i]是前i項和特別行動隊在j>k的情況下 j比k優
a*(a[i]-a[j])^2+b*(a[i]-a[j])+c>a*(a[i]-a[k])^2+b*(a[i]-a[k])+c
a*+b*>0
-b*}/(2*a*(a[j]-a[k]))大數學家的推理過程.txt
s醬第一次寫斜率優化的時候推的式子w
n^2dp很好寫的說……然而只有50分
加一口斜率優化就可以了
不知道斜率優化的可以去看玩具裝箱那道題w
#include#include
using
namespace
std;
const
int n=1000009
;int n,l=1,r=1
,q[n];
double
a,b,c,x[n],sum[n],f[n];
double judge(int k,intj)
intmain()
for(int i=1;i<=n;++i)
cout
<
long)(f[n])<
system(
"pause");
return0;
}
by:wypx
s:特別小豆隊√
w:這個隊真的有戰鬥力嘛w
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 表...
APIO 2010 特別行動隊
題目鏈結 演算法 設前i個士兵 修正 後的最大戰鬥力為fi 令sumi表示x的字首和 顯然 有狀態轉移方程 fi max 對該式進行化簡 得 fi max 令yj fj asumj 2 xj sumj 則 fi max 那麼yj xj 2asumi b fi asumi 2 bsumi c 顯然我們...