Submission #217944

#TimeUsernameProblemLanguageResultExecution timeMemory
217944VimmerZapina (COCI20_zapina)C++14
110 / 110
212 ms3228 KiB
#include <bits/stdc++.h> #define F first #define S second #define sz(x) int(x.size()) #define pb push_back #define N 100005 #define M ll(1e9 + 7) using namespace std; typedef long double ld; typedef long long ll; typedef short int si; ll fx(ll a, ll b) {return (a + b) % M;} ll mx(ll a, ll b) {return (a * b) % M;} ll binpow(ll a, ll b) { if (b == 0) return 1ll; ll s = binpow(a, b / 2); if (b % 2) return mx(mx(s, s), a); return mx(s, s); } ll dp[351][351][2]; ll fact[351], binnom[351][351]; ll calc(ll n, ll k) { if (k == 0) return 1; return mx(fact[n], binpow(mx(fact[n - k], fact[k]), M - 2)); } int main() { ios_base::sync_with_stdio(0); istream::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; fact[0] = 1; fact[1] = 1; for (ll i = 2; i <= n; i++) fact[i] = mx(fact[i - 1], i); for (ll i = 0; i <= n; i++) for (ll j = 0; j <= i; j++) binnom[i][j] = calc(i, j); dp[0][n][0] = 1; for (ll i = 2; i <= n; i++) dp[0][n - i][0] = binnom[n][i]; dp[0][n - 1][1] = binnom[n][1]; for (int i = 0; i < n - 1; i++) for (int j = 0; j <= n; j++) for (int f = 0; f <= 1; f++) { for (int u = 0; u <= j; u++) { if (u == i + 2) dp[i + 1][j - u][1] = fx(dp[i + 1][j - u][1], mx(binnom[j][u], dp[i][j][f])); else dp[i + 1][j - u][f] = fx(dp[i + 1][j - u][f], mx(binnom[j][u], dp[i][j][f])); } } cout << dp[n - 1][0][1] << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...