比赛 不准粘代码,必须自己写(HS除外) 评测结果 AAAAAAAAAA
题目名称 中国象棋 最终得分 100
用户昵称 leon 运行时间 0.194 s
代码语言 C++ 内存使用 22.50 MiB
提交时间 2019-09-25 18:50:31
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
const int mod=9999973;
long int f[maxn][maxn][maxn];
int C(int x){
	return ((x*(x-1))/2)%mod;
}
int main(){
	freopen("cchess.in","r",stdin);
	freopen("cchess.out","w",stdout);
 
	int m,n;
	cin>>n>>m;//m_hang
	f[0][0][0]=1;
	for(int i=1;i<=n;i++)
	for(int j=0;j<=m;j++)
	for(int k=0;k<=m-j;k++){
		f[i][j][k]=f[i-1][j][k];
		if(k>=1)
		f[i][j][k]+=f[i-1][j+1][k-1]*(j+1);
		if(j>=1)
		f[i][j][k]+=f[i-1][j-1][k]*(m-j+1-k);
		if(k>=2)
		f[i][j][k]+=f[i-1][j+2][k-2]*C(j+2);
		if(k>=1)
		f[i][j][k]+=f[i-1][j][k-1]*j*(m-j-k+1);
		if(j>=2)
		f[i][j][k]+=f[i-1][j-2][k]*C(m-j-k+2);
		f[i][j][k]%=mod;
	}
	long long ans=0;
	for(int i=0;i<=m;i++)
	for(int j=0;j<=m;j++){
		ans+=f[n][i][j];
		ans%=mod;
	}
	cout<<ans;	
	return 0;
}