提交时间:2025-10-18 15:40:10

运行 ID: 38671

#include <bits/stdc++.h> #define ctr(x) if (x){f[l][r]=1;continue;} #define ctb(x) if (x){f[l][r]=1;break;} using namespace std; bool f[305][305]; int n; char s[305]; signed main() { int _; scanf("%d", &_); while (_--) { scanf("%d", &n); scanf("%s", s + 1); for (int i = 1; i <= n; i++) f[i][i - 1] = 1; for (int len = 2; len <= n; len++) { for (int l = 1, r = len; r <= n; l++, r++) { if (s[l] == s[r]) { ctr(f[l + 1][r - 1]); if (len >= 3) { ctr(f[l + 1][r - 2]); ctr(f[l + 2][r - 1]); } } for (int k = l + 1; k <= r - 2; k++) { ctb(f[l][k] && f[k + 1][r]); if (s[l] == s[r]) ctb(f[l + 1][k - 1] && f[k + 1][r]); } } } if (f[1][n]) puts("YES"); else puts("NO"); } return 0; }