Submission #1287182

#TimeUsernameProblemLanguageResultExecution timeMemory
1287182arman.khachatryanZapina (COCI20_zapina)C++20
110 / 110
107 ms2412 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const long long N=360, MOD=1e9+7;
ll fact[N][N], dp[N][N];

ll sum(ll a, ll b){
    return (a+b)%MOD;
}

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

ll BinPow(ll x, ll y){
    ll ans=1;
    while(y>0){
        if(y&1){
            ans=mult(ans, x);
        }
        x=mult(x, x);
        y>>=1;
    }
    return ans;
}

int main() {
    int n;
    cin>>n;
    for(int i=1; i<=n; i++){
        dp[i][1]=1;
    }
    
    for(int i=0; i<N; i++){
        fact[i][0] = fact[i][i] = 1;
        for(int j=1; j<i; j++){
            fact[i][j]=sum(fact[i][j], sum(fact[i-1][j-1], fact[i-1][j]));
        }
    }
    for(int i=2; i<=n; i++){
        for(int j=2; j<=n; j++){
            for(int k=0; k<=j; k++){
                if(k==i){
                    dp[i][j]=sum(dp[i][j], mult(fact[j][k], BinPow(i-1, j-k)));
                }else{
                    dp[i][j]=sum(dp[i][j], mult(dp[i-1][j-k], fact[j][k]));
                }
            }
        }
    }
    cout<<dp[n][n];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...