Submission #651441

#TimeUsernameProblemLanguageResultExecution timeMemory
651441aebovTents (JOI18_tents)C++17
100 / 100
256 ms70804 KiB
#include<iostream>
#include<algorithm>
#include<vector>
#define ll long long
#define pb push_back
using namespace std;

const ll mod = (ll)1e9 + 7;
ll mul(ll a, ll b){
	return 1LL * (a%mod) * (b%mod) % mod;
}
ll add(ll a, ll b){
	return ((a%mod) + (b%mod) ) % mod;
}
const int N = (int)3002;
ll dp[N][N];
int n, m;

int main(){
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> n >> m;

	for(int i = 0; i <= n; i ++){
		for(int j = 0; j <= m; j ++){
			if(i == 0 || j == 0){
				dp[i][j]=  1;
				continue;
			}
			dp[i][j] = dp[i][j-1];
			dp[i][j] = add(dp[i][j], mul(1LL * i * 4, dp[i-1][j-1]));
			if(j > 1)dp[i][j] = add(dp[i][j], mul(1LL * i * (j - 1)  , dp[i-1][j-2]));
			if(i > 1)dp[i][j] = add(dp[i][j], mul(1LL * i * (i - 1) / 2, dp[i-2][j-1]));
			//cout << i << " " << j <<  " : " << dp[i][j] - 1 << endl;
		}
	}
	cout << add( -1, dp[n][m]) << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...