Submission #110096

#TimeUsernameProblemLanguageResultExecution timeMemory
110096SaboonTents (JOI18_tents)C++14
100 / 100
197 ms35728 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 3000 + 10; const int mod = 1e9 + 7; int dp[maxn][maxn]; int power(int a, int b){ if (b == 0) return 1; int ret = power(a, b / 2); ret = 1ll * ret * ret % mod; if (b & 1) return 1ll * ret * a % mod; return ret; } int main(){ ios_base::sync_with_stdio(false); int n, m; cin >> n >> m; for (int i = 0; i <= max(n, m); i++) dp[i][0] = dp[0][i] = 1; int pw = power(2, mod - 2); for (int i = 1; i <= n; i++){ for (int j = 1; j <= m; j++){ if (i == 1){ dp[i][j] = 4 * j + 1ll * j * (j - 1) % mod * pw % mod + 1; dp[i][j] %= mod; continue; } if (j == 1){ dp[i][j] = 4 * i + 1ll * i * (i - 1) % mod * pw % mod + 1; dp[i][j] %= mod; continue; } dp[i][j] = dp[i - 1][j]; dp[i][j] = (dp[i][j] + 4ll * dp[i - 1][j - 1] * j) % mod; dp[i][j] = (dp[i][j] + 1ll * dp[i - 1][j - 2] * j % mod * (j - 1) % mod * pw % mod) % mod; dp[i][j] = (dp[i][j] + 1ll * dp[i - 2][j - 1] * j % mod * (i - 1) % mod) % mod; } } cout << (dp[n][m] - 1 + mod) % mod << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...