This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
constexpr int NMAX = 355;
constexpr int MOD = 1e9 + 7;
int N;
int dp_not_Good[NMAX][NMAX];
int dp_Total[NMAX][NMAX];
int Comb[2*NMAX][2*NMAX];
void Read () {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> N;
}
void Precalculare () {
Comb[0][0] = 1;
for (int i = 1; i <= 2*N; ++ i ) {
Comb[i][0] = 1;
for (int j = 1; j <= i; ++ j )
Comb[i][j] = (Comb[i-1][j-1] + Comb[i-1][j]) % MOD;
}
}
void Solve () {
dp_not_Good[0][0] = 1;
dp_Total[0][0] = 1;
for (int i = 1; i <= N; ++ i ) {
for (int j = 0; j <= N; ++ j ) {
for (int cnt = 0; cnt <= j; ++ cnt ) {
if (cnt == i) continue;
dp_not_Good[i][j] = (1LL * dp_not_Good[i][j] + 1LL * Comb[j][cnt] * dp_not_Good[i-1][j-cnt]) % MOD;
}
for (int cnt = 0; cnt <= j; ++ cnt )
dp_Total[i][j] = (1LL * dp_Total[i][j] + 1LL * Comb[j][cnt] * dp_Total[i-1][j-cnt]) % MOD;
}
}
cout << (dp_Total[N][N] - dp_not_Good[N][N] + MOD) % MOD << '\n';
}
int main () {
Read();
Precalculare();
Solve();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |