1. 程式人生 > >【Luogu P2592】 [ZJOI2008]生日聚會

【Luogu P2592】 [ZJOI2008]生日聚會

疑問 ostream n) 找到 輸入格式 names 超過 條件 pan

題目描述

今天是hidadz小朋友的生日,她邀請了許多朋友來參加她的生日party。 hidadz帶著朋友們來到花園中,打算坐成一排玩遊戲。為了遊戲不至於無聊,就座的方案應滿足如下條件:

對於任意連續的一段,男孩與女孩的數目之差不超過k。

很快,小朋友便找到了一種方案坐了下來開始遊戲。hidadz的好朋友Susie發現,這樣的就座方案其實是很多的,所以大家很快就找到了一種,那麽到底有多少種呢?熱愛數學的hidadz和她的朋友們開始思考這個問題……

假設參加party的人中共有n個男孩與m個女孩,你是否能解答Susie和hidadz的疑問呢?由於這個數目可能很多,他們只想知道這個數目除以12345678的余數。

輸入輸出格式

輸入格式:

輸入文件party.in僅包含一行共3個整數,分別為男孩數目n, 女孩數目m, 常數k。

輸出格式:

輸出文件party.out應包含一行,為題中要求的答案。

輸入輸出樣例

輸入樣例#1: 復制
1 2 1
輸出樣例#1: 復制
1

說明

對於30%的數據,n , m ≤ 20;

對於100%的數據, n , m ≤ 150,k ≤ 20。

#include <iostream>
#include <cstdio>
#define MOD 12345678
using namespace std;
int n,m,k,f[310][160
][22][22]; void read(int &A); int main(){ read(n);read(m);read(k); f[0][0][0][0]=1; for(int i=0;i<=m+n-1;i++) for(int j=0;j<=n;j++) for(int x=0;x<=k;x++) for(int y=0;y<=k;y++){ (f[i+1][j+1][x+1][max(y-1,0)]+=f[i][j][x][y])%=MOD; (f[i
+1][j][max(x-1,0)][y+1]+=f[i][j][x][y])%=MOD; } int ans=0; for(int i=0;i<=k;i++) for(int j=0;j<=k;j++) (ans+=f[m+n][n][i][j])%=MOD; cout<<ans<<endl; return 0; } void read(int &A){ A=0;char CH=getchar(); while(CH<0||CH>9)CH=getchar(); while(CH>=0&&CH<=9){A=A*10+CH-0;CH=getchar();} }

【Luogu P2592】 [ZJOI2008]生日聚會