[bjoi2019]排兵布陣
對於每座堡壘,將$s$個對手排序,顯然如果安排的兵力能打敗第$i$個對手就一定能打敗前$i-1$個。
那麼對於第$i$座城堡,可以看做有$s+1$個物品(可以不安排兵力),第$j$個物品代價為$2*v[j]+1$,收益為$i*j$。
剩下的只需要將每座城堡的所有物品放在一組然後分組揹包即可。
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;int f[120][20010];
int cnt[120];
int g[120][120];
int h[120][120];
int s[120];
int mp[120][120];
int n,m,k;
int main()
} for(int i=1;i<=n;i++)
sort(s+1,s+1+k);
for(int j=1;j<=k;j++)
}} for(int i=1;i<=n;i++)
}} }
printf("%d",f[n][m]);
}
BJOI2019 排兵布陣
今天比賽上這道題好像是人均題呀。好吧,就乙個簡單的,連優化都不需要的揹包dp。我們每次只需要處理在比第i個城堡的第j大的玩家大的情況,不必把所有的兵的情況都處理完。然後就可以 include include include include include include include includ...
BJOI2019 排兵布陣 DP
題目大意 有 n 座城堡,s 輪遊戲。對於第 x 輪,第i座城堡的士兵數量為 a x i 如果你需要攻下第i座城堡,你在第i座城堡部署的士兵必須嚴格大於 2a x i 如果攻下了你會獲得 i 的收益。對於這 s 輪遊戲,你只能採用一種部署方式。下面問你應該如何部署,使得你在這 s 輪遊戲中的收益和最...
BJOI2019 排兵布陣 DP
比較好想的dp,設 dp i j 表示第 i 個城堡時,已派出 j 個士兵。決策時,貪心派出恰好嚴格大於某一玩家派出的數量的兩倍 不然浪費 我們發現又可以排序預處理出 a i j 表示第 i 個城堡,出兵數量第 j 大的人出兵數量 因為這樣可以很容易算出貢獻,即為 k times i dp轉移方程即...