每日一題(01.10)
阿新 • • 發佈:2019-01-13
Description:
現有一塊形如下圖的木板:
上面每一個凸出的三角都是直角邊長為A的等腰直角三角形,這些三角形形成了N個凹槽。現要往臺子上任意擺放邊長為A的正方形木塊,且使得木塊恰好卡到這些凹槽裡。擺放的木塊會形成的新的凹槽,這些新的凹槽上面又可以繼續擺放木塊,就像這樣:
請你程式設計求出,對於一塊有N個凹槽的木板,一共有多少種不同的擺放方式。
由於重力的存在,以下幾種情況是不可能出現的:
注意,空的臺子,也就是放置零塊木塊也算一種擺放方式。
Input:
多行輸入,第一行輸入一個正整數T(1<=T<=100),表示測試資料的組數。
接下來T組資料,每組包含一個正整數N(1<=N<=100),表示臺子上凹槽的個數。
Output:
對於每組測試資料,輸出一個整數,表示擺放方式的種數。
由於答案可能很大,請輸出答案取模9973後的結果。
Sample Input:
2
1
2
Sample Output:
2
5
Reference Code:
#include<stdio.h>
#include<string.h>
const int MAXN=1005;
const int MOD=9973;
int dp[MAXN][MAXN];
int main(){
int T;
scanf("%d",&T);
while( T--){
int N;
scanf("%d",&N);
memset(dp,0,sizeof(dp));
dp[1][0]=dp[1][1]=1;
for(int i=2;i<=N;i++){
for(int j=0;j<=i;j++)
if(j==0)
for(int k=0;k<=i-1;k++)
dp[i][j]=(dp[i][j]+dp[i-1][ k])%MOD;
else
for(int k=j-1;k<=i-1;k++)
dp[i][j]=(dp[i][j]+dp[i-1][k])%MOD;
}
int ans=0;
for(int i=0;i<=N;i++)
ans=(ans+dp[N][i])%MOD;
printf("%d\n",ans);
}
return 0;
}