记录编号 |
36101 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[AHOI2009] 中国象棋 |
最终得分 |
100 |
用户昵称 |
Czb。 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.246 s |
提交时间 |
2012-03-09 09:39:56 |
内存使用 |
10.42 MiB |
显示代码纯文本
#include<stdio.h>
long long n,m,ans,a[110][110][110];
int main()
{
freopen("cchess.in","r",stdin);
freopen("cchess.out","w",stdout);
int i,j,k;
scanf("%lld%lld",&n,&m);
a[0][0][0]=1;
for(i=1;i<=n;i++)
{
for(j=0;j<=m;j++)
{
for(k=0;j+k<=m;k++)
{
a[i][j][k]=a[i-1][j][k];
if(j>0)
{
a[i][j][k]+=a[i-1][j-1][k]*(m-j-k+1);
}
if(j>1)
{
a[i][j][k]+=a[i-1][j-2][k]*(m-j-k+2)*(m-j-k+1)/2;
}
if(k>0)
{
a[i][j][k]+=a[i-1][j][k-1]*(j)*(m-j-k+1);
}
if(j<m&&k>0)
{
a[i][j][k]+=a[i-1][j+1][k-1]*(j+1);
}
if(j<m-1&&k>1)
{
a[i][j][k]+=a[i-1][j+2][k-2]*(j+1)*(j+2)/2;
}
a[i][j][k]%=9999973;
}
}
}
for(i=0;i<=m;i++)
{
for(j=0;i+j<=m;j++)
{
ans+=a[n][i][j];
}
}
ans%=9999973;
printf("%lld\n",ans);
return 0;
}