BJOI2019 排兵布陣 DP

2022-05-20 23:05:18 字數 503 閱讀 6925

比較好想的dp,設\(dp[i][j]\)表示第\(i\)個城堡時,已派出\(j\)個士兵。決策時,貪心派出恰好嚴格大於某一玩家派出的數量的兩倍(不然浪費)。我們發現又可以排序預處理出\(a[i][j]\)表示第\(i\)個城堡,出兵數量第\(j\)大的人出兵數量(因為這樣可以很容易算出貢獻,即為\(k\times i\))

dp轉移方程即為:

\[dp[j]=max(dp[j-a[i][k]*2-1]+k*i, dp[j]);

\]ac code:

#include #include #define max(a,b) ((a)>(b)?(a):(b))

using namespace std;

int s,n,m,dp[20002],a[110][110],ans;

signed main()

/* dp[i][j]第i個城堡時,已派出j個士兵

a[i][j]第i個城堡,第j個人出的兵

*/

BJOI2019 排兵布陣 DP

題目大意 有 n 座城堡,s 輪遊戲。對於第 x 輪,第i座城堡的士兵數量為 a x i 如果你需要攻下第i座城堡,你在第i座城堡部署的士兵必須嚴格大於 2a x i 如果攻下了你會獲得 i 的收益。對於這 s 輪遊戲,你只能採用一種部署方式。下面問你應該如何部署,使得你在這 s 輪遊戲中的收益和最...

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...