比赛 不准粘代码,必须自己写(HS除外) 评测结果 AAAAAAAAAA
题目名称 中国象棋 最终得分 100
用户昵称 ShallowDream雨梨 运行时间 0.189 s
代码语言 C++ 内存使用 22.50 MiB
提交时间 2019-10-24 21:58:55
显示代码纯文本
    #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;
    }
    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;
    }