关于我的代码只输出1这回事
代码1
#include<iostream>
#include<cstring>
#define ll long long
using namespace std;
const ll p=9999973;
ll n,m,f[101][101][101],ans=0;
ll c(ll x){
return ((x+1)*(x+2))%p;
}
int main()
{
cin>>n>>m;
memset(f,0,sizeof(f));
f[0][0][0]=1;
for(ll i=1;i<=n;i++){
for(ll a=0;a<=m;a++){
for(ll b=0;a+b<=m;b++){
f[i][a][b]=f[i-1][a][b];
if(b>=1)f[i][a][b]+=(f[i-1][a+1][b-1]*(a+1))%p;
if(a+b-1<=m)f[i][a][b]+=(f[i-1][a][b+1]*(b+1))%p;
if(b>=2)f[i][a][b]+=(f[i-1][a+2][b-2]*c(a))%p;//c(2,a+2)=a+2!/(a!*2!)=(a+1)*(a+2)/2
if(a+b-2<=m)f[i][a][b]+=(f[i-1][a][b+2]*c(b))%p;
if(a+b-1<=m)f[i][a][b]+=(f[i-1][a+1][b]*(a+1)*b)%p;
f[i][a][b]%=p;
}
}
}
for(ll a=0;a<=m;a++){
for(ll b=0;b<=m;b++){
ans+=f[n][a][b];
ans%=p;
cout<<f[n][a][b]<<" ";
}
cout<<endl;
}
cout<<ans;
return 0;
}
代码2
#include<iostream>
#include<cstring>
#define ll long long
using namespace std;
const ll p=9999973;
ll n,m,f[101][101][101],ans=0;
ll c(ll x){
return ((x+1)*(x+2)/2)%p;//c(2,x+2)=x+2!/(x!*2!)=(x+1)*(x+2)/2
}
int main()
{
cin>>n>>m;
memset(f,0,sizeof(f));
f[0][0][0]=1;
for(ll i=0;i<=n;i++){
for(ll a=0;a<=m;a++){
for(ll b=0;a+b<=m;b++){
if(!f[i][a][b])continue;
f[i+1][a][b]+=f[i][a][b];
if(b>=1)f[i+1][a-1][b+1]+=(f[i][a][b]*a)%p;
if(a+b+1<=m)f[i+1][a][b-1]+=(f[i][a][b]*b)%p;
if(b>=2)f[i+1][a-2][b+2]+=(f[i][a][b]*c(a))%p;
if(a+b+2<=m)f[i+1][a][b-2]+=(f[i][a][b]*c(b))%p;
if(a+b+1<=m&&b>1)f[i+1][a-1][b]+=(f[i][a][b]*a*b)%p;
}
}
}
for(ll a=0;a<=m;a++){
for(ll b=0;b<=m;b++){
ans+=f[n][a][b];
ans%=p;
//cout<<f[n][a][b]<<" ";
}
cout<<endl;
}
cout<<ans;
return 0;
}