題目大意:有$n$座城堡,$s$輪遊戲。
對於第$x$輪,第i座城堡的士兵數量為$a[x][i]$。
如果你需要攻下第i座城堡,你在第i座城堡部署的士兵必須嚴格大於$2a[x][i]$,如果攻下了你會獲得$i$的收益。
對於這$s$輪遊戲,你只能採用一種部署方式。
下面問你應該如何部署,使得你在這$s$輪遊戲中的收益和最大。
資料範圍:$n,s≤100$,$m≤2000$。
我們考慮直接$dp$,設$f[i][j]$表示前$i$個城堡部署了$j$名士兵的最大收益。
不難發現,$f[i][j]=\max\limits_ f[i-1][j-k]+val[i][k]$。
其中,$val[i][k]$表示你在第$i$城堡部署$k$個人的收益和。
直接$dp$就可以了,複雜度為$o(nms)$。
1 #include2#define m 105
3#define n 20005
4using
namespace
std;56
int f[m][n]=,a[m][m]=,val[m][m]=;
7int
s,n,m;89
intmain()19}
20for(int i=1;i<=n;i++)
21for(int j=0;j<=m;j++)27}
28int maxn=0;29
for(int i=1;i<=m;i++)
30 maxn=max(maxn,f[n][i]);
31 cout32 }
BJOI2019 排兵布陣 DP
比較好想的dp,設 dp i j 表示第 i 個城堡時,已派出 j 個士兵。決策時,貪心派出恰好嚴格大於某一玩家派出的數量的兩倍 不然浪費 我們發現又可以排序預處理出 a i j 表示第 i 個城堡,出兵數量第 j 大的人出兵數量 因為這樣可以很容易算出貢獻,即為 k times i dp轉移方程即...
BJOI2019 排兵布陣 DP
題目大意 有 n 座城堡,s 輪遊戲。對於第 x 輪,第i座城堡的士兵數量為 a x i 如果你需要攻下第i座城堡,你在第i座城堡部署的士兵必須嚴格大於 2a x i 如果攻下了你會獲得 i 的收益。對於這 s 輪遊戲,你只能採用一種部署方式。下面問你應該如何部署,使得你在這 s 輪遊戲中的收益和最...
BJOI2019 排兵布陣
今天比賽上這道題好像是人均題呀。好吧,就乙個簡單的,連優化都不需要的揹包dp。我們每次只需要處理在比第i個城堡的第j大的玩家大的情況,不必把所有的兵的情況都處理完。然後就可以 include include include include include include include includ...