#include <bits/stdc++.h>
using namespace std;
#define N 350
int dp[N][N][N], g[N][N];
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    memset(dp, -1, sizeof dp);
    int n, k;
    cin >> n >> k;
    string s;
    cin >> s;
    int sum = 0;
    for (int i = 0; i < n; i++) {
        int f = 0;
        for (int j = n - 1; j >= i; j--) {
            g[i][j] = f + sum;
            f += (s[j] == 'C');
        }
        sum += (s[i] == 'C');
    }
    function<int(int, int, int)> solve = [&](int fi, int l, int r) {
        if (l > r) return 1;
        // cout << fi << ' ' << l << ' ' << r << '\n';
        // if (fi < 0 || fi > k) exit(0);
        if (dp[fi][l][r] != -1) return dp[fi][l][r];
        int ans = 1;
        if (fi > 1) {
            if (s[l] == 'C') ans &= solve(2 * k - g[l][r] - fi, l + 1, r);
            else ans &= solve(2 * k - g[l][r] - fi, l + 1, r);
            if (s[r] == 'C') ans &= solve(2 * k - g[l][r] - fi, l, r - 1);
            else ans &= solve(2 * k - g[l][r] - fi, l, r - 1);
        }
        else {
            if (s[l] == 'C' && s[r] == 'C') return dp[fi][l][r] = 0;
            if (s[l] == 'P') ans &= solve(2 * k - g[l][r] - fi, l + 1, r);
            if (s[r] == 'P') ans &= solve(2 * k - g[l][r] - fi, l, r - 1);
        }
        return dp[fi][l][r] = 1 - ans;
    };
    cout << (solve(k, 0, n - 1) ? "DA" : "NE") << '\n';
    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... |