Submission #612776

#TimeUsernameProblemLanguageResultExecution timeMemory
612776stevancvTents (JOI18_tents)C++14
100 / 100
599 ms40668 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define sp ' ' #define en '\n' #define smin(a, b) a = min(a, b) #define smax(a, b) a = max(a, b) using namespace std; const int N = 3e3 + 2; const int mod = 1e9 + 7; int Add(int a, int b) { a += b; if (a >= mod) a -= mod; if (a < 0) a += mod; return a; } int Mul(int a, int b) { ll c = a; c *= b; c %= mod; return c; } bool was[N][N]; int dp[N][N]; int Solve(int a, int b) { if (a <= 0 || b <= 0) return 1; if (a == 1 && b == 1) return 5; if (was[a][b]) return dp[a][b]; was[a][b] = 1; int ans = Solve(a - 1, b); ll k = 4 * b; ans = Add(ans, Mul(Solve(a - 1, b - 1), k)); k = b * (b - 1) / 2; ans = Add(ans, Mul(Solve(a - 1, b - 2), k)); k = (a - 1) * b; ans = Add(ans, Mul(Solve(a - 2, b - 1), k)); return dp[a][b] = ans; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int h, w; cin >> h >> w; cout << Add(Solve(h, w), -1) << en; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...