Submission #529021

#TimeUsernameProblemLanguageResultExecution timeMemory
529021wiwihoTents (JOI18_tents)C++14
100 / 100
212 ms70840 KiB
#include<bits/stdc++.h> #define printv(a, b) { \ for(auto pv : a) b << pv << " "; \ b << "\n"; \ } using namespace std; typedef long long ll; const ll MOD = 1000000007; ll C2(ll n){ if(n < 2) return 0; return n * (n - 1) / 2; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; vector<vector<ll>> dp(n + 1, vector<ll>(m + 1)); for(int i = 0; i <= n; i++) dp[i][0] = 1; for(int i = 0; i <= m; i++) dp[0][i] = 1; for(int sz = 2; sz <= n + m; sz++){ for(int i = 1; i < sz; i++){ int j = sz - i; if(i > n || j > m) continue; if(j >= 2) dp[i][j] += dp[i - 1][j - 2] * i % MOD * (j - 1) % MOD; if(i >= 2) dp[i][j] += dp[i - 2][j - 1] * C2(i) % MOD; dp[i][j] += 4LL * i * dp[i - 1][j - 1] % MOD; dp[i][j] += dp[i][j - 1]; dp[i][j] %= MOD; } } //for(int i = 0; i <= n; i++) printv(dp[i], cerr); ll ans = dp[n][m]; ans--; ans = (ans % MOD + MOD) % MOD; cout << ans << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...