求助
查看原帖
求助
530485
lijiongkai楼主2022/7/14 14:49
#include <bits/stdc++.h>
using namespace std;
#define for(i, a, b) for (l i = (a); i <= (b); ++ i) 
typedef long long l;
const int mod = 9999973; 
l n, m, ans;
l f[110][110][110];

l C(int x)
{
	return (x * (x - 1) / 2) % mod;
}

signed main()
{
	cin >> n >> m;
	f[0][0][0] = 1;
	for (i, 1, n)
		for(j, 0, m)
			for (k, 0, m - j)
			{
				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);
				//放1个在有一个的列 
				if (j >= 1) f[i][j][k] += f[i - 1][j - 1][k] * (m - j + 1 - k);
				//放1个在空列 
				if (k >= 2) f[i][j][k] += f[i - 1][j + 2][k - 2] * C(j - 2);
				//放2个有一个的列 
				if (k >= 1) f[i][j][k] += f[i - 1][j][k - 1] * j * (m - j + 1 - k);
				//放一个在空列,一个在有一个的列 
				if (j >= 2) f[i][j][k] += f[i - 1][j - 2][k] * C(m - j + 2 - k);
				//放2个在空列 
				f[i][j][k] %= mod;
			}
	for (i, 0, m)
		for(j, 0, m)
			ans += f[n][i][j];
	cout << ans % mod;
}
2022/7/14 14:49
加载中...