BJOI2019 排兵布陣 分組揹包

2022-05-08 03:09:10 字數 657 閱讀 2736

[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轉移方程即...