BZOJ1037動態規劃

2021-07-15 05:01:03 字數 725 閱讀 4236

資料範圍很小,可以用4維儲存下前i個男孩j個女孩,從這一位往前的所有點中男-女的差最大為x,女-男為y的方案數

主動遞推:

f[ i+1 ][ j ][ x+1 ][ max( y-1 , 0 )] += f[ i ][ j ][ x ][ y ];

f[ i ][ j+1 ][ max( x-1 , 0) ][ y+1 ] += f[ i ][ j ][ x ][ y ];

最後答案為

(sigma x sigma y) f[ n ][ m ][ x ][ y ]

150 * 150 * 20 * 20的狀態數,o( 1 )轉移

#include #include #define n 155

#define k 25

#define mod 12345678

using namespace std;

typedef long long ll;

ll f[n][n][k][k];

int n,m,k;

int main()

ll ans = 0ll;

for (int x=0;x<=k;x++)

for (int y=0;y<=k;y++)

ans = (ans + f[n][m][x][y]) % mod;

cout << ans << endl;

return 0;

}

生日聚會 BZOJ 1037

生日聚會 問題描述 今天是hidadz小朋友的生日,她邀請了許多朋友來參加她的生日party。hidadz帶著朋友們來到花園中,打算坐成一排玩遊戲。為了遊戲不至於無聊,就座的方案應滿足如下條件 對於任意連續的一段,男孩與女孩的數目之差不超過k。很快,小朋友便找到了一種方案坐了下來開始遊戲。hidad...

bzoj 1037 生日聚會Party(DP)

傳送門biu 如果求乙個01序列滿足任意一段0和1的數量差不超過k,可以考慮在已滿足條件的某序列後面填一位0或1,只考慮當前序列的所有字尾是否滿足0和1數量差不超過k的條件。這樣我們就判斷了最終序列的所有字首的字尾是否滿足條件,即任意一段0和1的數量差是否超過k。令f i j x y 表示有i個男孩...

poj 1037 動態規劃 計數,求排列布局

這道題,黑書上p257有解題的分析,之前沒看明白 網上搜了一大堆 看了這兩位大牛的報告 題目的大意就是一些裝飾欄,編號為1,2,3,n,他們的排列要遵循每個柵欄的編號要麼同大於相鄰的柵欄編號 a i a i 1 a i a i 1 要麼同小於相鄰的柵欄編號 a i a i 1 a i a i 1 按...