提交时间:2025-10-18 13:18:41
运行 ID: 38596
#include<bits/stdc++.h> using namespace std; int T,n,r; string s; bool check(int l,int r){ for(int i=l;i<=(r-l+1)/2+l-1;i++){ if(s[i]!=s[r-i+l]){ return 0; } } return 1; } bool dp[305][305]; int main(){ // freopen("judge.in","r",stdin); // freopen("judge.out","w",stdout); cin>>T; while(T--){ cin>>n; cin>>s; for(int i=2;i<=s.size();i++){ for(int j=0;j<=s.size()-i;j++){ r=j+i-1; for(int k=j+1;k<=r-2;k++){ dp[j][r]|=(dp[j][k]&&dp[k+1][r]); } if(s[j]==s[r]){ for(int k=j+2;k<=r-3;k++){ dp[j][r]|=(dp[j+1][k-1]&&dp[k+1][r-1]); } dp[j][r]|=dp[j+1][r-1]; dp[j][r]|=dp[j+2][r-1]; dp[j][r]|=dp[j+1][r-2]; } if(!dp[j][r])dp[j][r]|=check(j,r); } } if(dp[0][n-1]) cout<<"YES\n"; else cout<<"NO\n"; for(int i=0;i<=n;i++){ for(int j=0;j<=n;j++){ dp[i][j]=0; } } } }