每日一题(01.10)

Description:

现有一块形如下图的木板:
图1
上面每一个凸出的三角都是直角边长为A的等腰直角三角形,这些三角形形成了N个凹槽。现要往台子上任意摆放边长为A的正方形木块,且使得木块恰好卡到这些凹槽里。摆放的木块会形成的新的凹槽,这些新的凹槽上面又可以继续摆放木块,就像这样:
图2
请你编程求出,对于一块有N个凹槽的木板,一共有多少种不同的摆放方式。
由于重力的存在,以下几种情况是不可能出现的:
图3
注意,空的台子,也就是放置零块木块也算一种摆放方式。

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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值