제출 #610089

#제출 시각아이디문제언어결과실행 시간메모리
610089penguinhackerTents (JOI18_tents)C++17
100 / 100
117 ms70764 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ar array

const int mxN=3000, M=1e9+7;
int n, m;
ll dp[mxN+1][mxN+1];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m;
	for (int i=0; i<=max(n, m); ++i)
		dp[0][i]=dp[i][0]=1;
	for (int i=1; i<=n; ++i)
		for (int j=1; j<=m; ++j) {
			// two tents on row 1
			dp[i][j]=dp[i-1][j];
			if (j>=2)
				dp[i][j]=(dp[i][j]+dp[i-1][j-2]*j*(j-1)/2)%M;
			dp[i][j]=(dp[i][j]+dp[i-1][j-1]*4*j)%M;
			if (i>=2)
				dp[i][j]=(dp[i][j]+dp[i-2][j-1]*j*(i-1))%M;
		}
	cout << (dp[n][m]-1+M)%M;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...