제출 #1370410

#제출 시각아이디문제언어결과실행 시간메모리
1370410FaresSTHZapina (COCI20_zapina)C++20
110 / 110
49 ms3588 KiB
#include"bits/stdc++.h"
using namespace std;
using ll=long long;
#define S second
#define F first
const int md=1e9+7;
const int mx=400;
ll nck[mx][mx],dp[mx][mx][2];
void add(ll&a,ll b){
    a+=b;
    if(a>=md)a-=md;
}
int main(){
    cin.tie(0)->sync_with_stdio(0);
    int n;
    cin>>n;
    for(int i=0;i<=n;i++){
        nck[i][0]=nck[i][i]=1;
        for(int j=1;j<i;j++){
            nck[i][j]=(nck[i-1][j]+nck[i-1][j-1])%md;
        }
    }
    dp[0][0][0]=1;
    for(int i=1;i<=n;i++){
        dp[i][0][0]=1;
        for(int j=1;j<=n;j++){
            for(int k=0;k<=j;k++){
                if(j-k!=i)add(dp[i][j][0],dp[i-1][k][0]*nck[j][j-k]%md);
                add(dp[i][j][1],dp[i-1][k][1]*nck[j][j-k]%md);
            }
            if(j>=i)add(dp[i][j][1],dp[i-1][j-i][0]*nck[j][i]%md);
        }
    }
    cout<<dp[n][n][1];
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…