Submission #77888

#TimeUsernameProblemLanguageResultExecution timeMemory
77888gs14004Tents (JOI18_tents)C++17
100 / 100
311 ms71856 KiB
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3005;
const int mod = 1e9 + 7;
typedef long long lint;

lint dp[MAXN][MAXN];

lint f(int x, int y){
	if(y < 0 || x < 0) return 0;
	if(x == 0) return 1;
	if(~dp[x][y]) return dp[x][y];
	lint ret = f(x-1, y);
	ret += f(x-1, y-2) * (y * (y - 1) / 2);
	ret += f(x-2, y-1) * y * (x - 1);
	ret += f(x-1, y-1) * 4 * y;
	return dp[x][y] = ret % mod;
}

int main(){
	int n, m;
	cin >> n >> m;
	memset(dp, -1, sizeof(dp));
	cout << (f(n, m) + mod - 1) % mod << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...