# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1005381 | 2024-06-22T11:43:28 Z | SulA | 캥거루 (CEOI16_kangaroo) | C++14 | 0 ms | 0 KB |
#include <bits/stdc++.h> using namespace std; const int MOD = 1e9+7; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N,cs,cf; cin >> N >> cs >> cf; if (N > 40) return cout << 0, 0; --cs, --cf; long long dp[2][N+1][N][N] = {}; dp[0][1][0][0] = dp[1][1][0][0] = 1; for (int n = 2; n <= N; n++) { for (int s = 0; s < n; s++) { for (int f = 0; f < n; f++) { if (s == f) continue; // finding dp[0][...] // 0 = right-to-left // 1 = left-to-right for (int p = s+1; p < n; p++) { (dp[0][n][s][f] += dp[1][n-1][p-1][f-(f > s)]) %= MOD; } for (int p = s-1; p >= 0; p--) { (dp[1][n][s][f] += dp[0][n-1][p][f-(f > s)]) %= MOD; } } } } cout << (dp[0][N][cs][cf] + dp[0][N][cs][cf]) % MOD; }