[LOJ # 2833] "JOISC 2018 Day 1" tent

Subject to the effect:

answer:

Card point: None

 

C++ Code:

#include <cstdio>
#include <algorithm>
#include <iostream>
#define mul(a, b) (static_cast<long long> (a) * (b) % mod)
const int maxn = 3010, mod = 1e9 + 7;

inline void reduce(int &x) { x += x >> 31 & mod; }

int n, m;
int f[maxn][maxn];
int main() {
	std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
	std::cin >> n >> m;
	for (int i = 0; i <= n; ++i) {
		for (int j = 0; j <= m; ++j) {
			if (!i || !j) {
				f[i][j] = 1;
				continue;
			}
			f[i][j] = f[i][j - 1];
			reduce(f[i][j] += mul(4, f[i - 1][j - 1]) * i % mod - mod);
			if (i > 1)
				reduce(f[i][j] += 1ll * i * (i - 1) / 2 % mod * f[i - 2][j - 1] % mod - mod);
			if (j > 1)
				reduce(f[i][j] += mul(i, j - 1) * f[i - 1][j - 2] % mod - mod);
		}
	}
	reduce(--f[n][m]);
	std::cout << f[n][m] << '\n';
	return 0;
}

 

Guess you like

Origin www.cnblogs.com/Memory-of-winter/p/11209905.html