提交时间:2025-10-18 13:47:17
运行 ID: 38624
#include <bits/stdc++.h> using namespace std; int T,n; string s; bool dp[302][302]; signed main () { ios::sync_with_stdio(); cin.tie(0); cout.tie(0); cin >> T; while (T--) { memset(dp,0,sizeof(dp)); cin >> n; cin >> s; s = ' ' + s; for (int i = 1;i <= n;i++) { dp[i][i - 1] = 1; } for (int i = 2;i <= n;i++) { for (int j = 1;j + i - 1 <= n;j++) { int l = j,r = j + i - 1; if (s[l] == s[r]) { dp[l][r] |= dp[l + 1][r - 1]; dp[l][r] |= dp[l + 2][r - 1]; dp[l][r] |= dp[l + 1][r - 2]; for (int k = l + 1;k < r;k++) { dp[l][r] |= (dp[l + 1][k - 1] & dp[k + 1][r - 1]); } } for (int k = l;k < r;k++) { dp[l][r] |= (dp[l][k] & dp[k + 1][r]); } } } if (dp[1][n]) { cout << "YES" << endl; } else { cout << "NO" << endl; } } return 0; }