Submission #1034136

#TimeUsernameProblemLanguageResultExecution timeMemory
1034136vjudge1Tents (JOI18_tents)C++17
100 / 100
219 ms71240 KiB
#include <bits/stdc++.h> using namespace std; const int mod = 1e9 + 7; #define int long long int dp[3003][3003]; int dv; int bp(int a, int b){ if(b == 0) return 1; if(b == 1) return a; int k = bp(a, b/2); k = (k * k) % mod; if(b % 2 == 0) return k; return (a * k) % mod; } int cal(int i, int j){ if(i < 0 || j < 0) return 0; if(dp[i][j] != -1) return dp[i][j]; int ans = 0; ans = (ans + cal(i - 1, j)) % mod; ans = (ans + cal(i - 1, j - 2) * j % mod * (j - 1) % mod * dv % mod) % mod; ans = (ans + cal(i - 2, j - 1) * j % mod * (i - 1) % mod) % mod; ans = (ans + cal(i - 1, j - 1) * j % mod * 4 % mod) % mod; return dp[i][j] = ans; } signed main(){ int n, m; cin >> n >> m; dv = bp(2, mod - 2); for(int i = 0; i <= n; i++) for(int j = 0; j <= m; j++) dp[i][j] = -1; for(int i = 0; i <= n; i++) dp[i][0] = 1; for(int i = 0; i <= m; i++) dp[0][i] = 1; cout << (cal(n, m) - 1 + mod)%mod; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...