제출 #444749

#제출 시각아이디문제언어결과실행 시간메모리
444749Dipra_IrhamZapina (COCI20_zapina)C++14
110 / 110
503 ms3396 KiB
#include "bits/stdc++.h" #define pb(x) push_back(x) #define fil(x, y) memset(x, y, sizeof(x)) #define ll long long #define ff first #define ss second #define printp(x) x.ff << " " << x.ss #define pii pair<int,int> #define pll pair<long long,long long> #define mp(x, y) make_pair(x,y) #define inf 1073741823 #define infll 4611686018427387903 #define M 1000000007 #define db(x) cout << x << " "; #define N 357 #define sz size #define sm 0.0000007 #define ins insert #define ers erase #define all(k) k.begin(), k.end() #define cnt count #define fastio ios_base::sync_with_stdio(0);cin.tie(0) using namespace std; ll mem[N][N][2]; ll ncr[N][N]; int n; ll dp(int pos, int x, bool g) { if(pos > n) { if(x == 0 && g == 1) return 1; return 0; } if(mem[pos][x][g] != -1) return mem[pos][x][g]; ll ans = 0; for(int i = 0;i <= x;i++) { bool k = g; if(i == pos) k = 1; ans = (ans + (dp(pos + 1, x - i, k)*ncr[x][i]) % M) % M; } return mem[pos][x][g] = ans; } int main() { fastio; cin >> n; fil(mem, -1); for(int i = 0;i <= 350;i++) { for(int j = 0;j <= i;j++) { if(j == 0 || j == i) ncr[i][j] = 1; else { ncr[i][j] = (ncr[i - 1][j - 1] + ncr[i - 1][j]) % M; } } } ll ans = dp(1, n, 0); cout << ans << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...