1037 ZJOI2008 生日聚會Party

2022-05-16 05:45:38 字數 1214 閱讀 8356

time limit: 10 sec  memory limit: 162 mb

submit: 3121  solved: 1858

[submit][status][discuss]

今天是hidadz小朋友的生日,她邀請了許多朋友來參加她的生日party。 hidadz帶著朋友們來到花園中,打算

坐成一排玩遊戲。為了遊戲不至於無聊,就座的方案應滿足如下條件:對於任意連續的一段,男孩與女孩的數目之

差不超過k。很快,小朋友便找到了一種方案坐了下來開始遊戲。hidadz的好朋友susie發現,這樣的就座方案其實

是很多的,所以大家很快就找到了一種,那麼到底有多少種呢?熱愛數學的hidadz和她的朋友們開始思考這個問題

…… 假設參加party的人中共有n個男孩與m個女孩,你是否能解答susie和hidadz的疑問呢?由於這個數目可能很

多,他們只想知道這個數目除以12345678的餘數。

僅包含一行共3個整數,分別為男孩數目n,女孩數目m,常數k。

應包含一行,為題中要求的答案。

1 2 1

1n , m ≤ 150,k ≤ 20。

設狀態方程:

f[i][j][x][y]表示在 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]

迴圈中會出現超出範圍的無效計算,因此注意把陣列開大一點,無效計算消耗的時間基本可以忽略不計

1 #include2 #include3

using

namespace

std;45

const

int mod=12345678;6

intn,m,k,sum,ans;

7int f[155][155][25][25];8

9int

main()

1022

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

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

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

25 printf("%d"

,ans);

26 }

bzoj1037 ZJOI2008 生日聚會

bzoj1037 zjoi2008 生日聚會 題意 一排小孩坐著玩遊戲。就座的方案滿足如下條件 對於任意連續的一段,男孩與女孩的數目之差不超過k。給出男孩數,女孩數和k,求就座方案數除以12345678的餘數。題解 dp方程見程式,i1i2表示當前選了幾男幾女,i3i4分別表示當前男比女多幾個和女比...

bzoj1037 ZJOI2008 生日聚會

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

ZJOI2008 生日聚會

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