Submission #1287169

#TimeUsernameProblemLanguageResultExecution timeMemory
1287169arman.khachatryanZapina (COCI20_zapina)C++20
55 / 110
1096 ms1240 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long

const int N = 355;
const ll MOD = 1e9 + 7;

ll dp[N][N], fact[N], invfact[N];

ll mult(ll a, ll b) { 
    return (a * b) % MOD; 
}

ll sum(ll a, ll b) { 
    return (a + b >= MOD ? a + b - MOD : a + b); 
}

ll binpow(ll a, ll b) {
    ll res = 1;
    while (b) {
        if (b & 1) res = mult(res, a);
        a = mult(a, a);
        b >>= 1;
    }
    return res;
}

ll C(ll n, ll k) {
    if (k < 0 || k > n) return 0;
    return mult(fact[n], binpow(mult(fact[k], fact[n - k]), MOD-2));
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    fact[0] = 1;
    for (int i = 1; i < N; i++) fact[i] = mult(fact[i - 1], i);
    dp[1][1] = 1;
    for (int i = 2; i <= n; i++) {
        for (int j = 0; j <= n; j++) {
            for (int k = 0; k <= j; k++) {
                if (k == i)
                    dp[i][j] = sum(dp[i][j], mult(C(j, k), binpow(i - 1, j - k)));
                else
                    dp[i][j] = sum(dp[i][j], mult(C(j, k), dp[i - 1][j - k]));
            }
        }
    }

    cout << dp[n][n] % MOD << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...