两个代码有什么区别,一个40pts,一个100pts
查看原帖
两个代码有什么区别,一个40pts,一个100pts
520544
Phrvth楼主2023/7/17 21:12

40pts code:

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll MAXN = 1e2 + 7, Mod = 9999973;

int n, m;

ll F[MAXN][MAXN][MAXN];

ll C(ll x) {
	return (x * (x - 1) / 2) % Mod;
}

int main () {
	cin >> n >> m;
	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] + (k >= 1 ? F[i - 1][j + 1][k - 1] * (j + 1) : 0LL) + (j >= 1 ? F[i - 1][j - 1][k] * (m - j - k + 1) : 0LL) +
				(k >= 1 ? F[i - 1][j][k - 1] * j * (m - j - k + 1) : 0LL) + (j >= 2 ? F[i - 1][j - 2][k] * C(m - j - k + 2) : 0LL) +  
				(k >= 2 ? F[i - 1][j + 2][k - 2] * C(j + 2) : 0LL) % Mod;
			}
		}
	}
	ll ans = 0;
	for (int i = 0; i <= m; i ++) 
		for (int j = 0; j <= m - i; j ++)
			ans += F[n][i][j], ans %= Mod;
	cout << ans << '\n';
	return 0;
}

100pts code

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const ll MAXN = 1e2 + 7, Mod = 9999973;

int n, m;

ll F[MAXN][MAXN][MAXN];

ll C(ll x) {
	return (x * (x - 1) / 2) % Mod;
}

int main () {
	cin >> n >> m;
	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 - k + 1);
				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);  
				if (k >= 2) F[i][j][k] += F[i - 1][j + 2][k - 2] * C(j + 2);
				F[i][j][k] %= Mod;
			}
		}
	}
	ll ans = 0;
	for (int i = 0; i <= m; i ++) 
		for (int j = 0; j <= m - i; j ++)
			ans += F[n][i][j], ans %= Mod;
	cout << ans << '\n';
	return 0;
}
2023/7/17 21:12
加载中...