提交时间:2025-10-18 14:42:12

运行 ID: 38651

#include<bits/stdc++.h> using namespace std; const int N = 310; int T,n,dp[N][N]; char s[N]; int main(){ cin>>T; while(T--){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ dp[i][j]=0; } } for(int i=1;i<=n;i++){ cin>>s[i]; if(s[i]==s[i-1]&&i!=1){ dp[i-1][i]=1; } } for(int len=3;len<=n;len++){ for(int i=1;i<=n-len+1;i++){ int j=i+len-1; for(int k=i;k<j;k++){ dp[i][j]=max(dp[i][j],(dp[i][k]&dp[k+1][j])); if(s[i]==s[j]){ if(k==i+1&&k+1<=j-1){ dp[i][j]=max(dp[i][j],dp[k+1][j-1]); } if(k==j-1&&i+1<=k-1){ dp[i][j]=max(dp[i][j],dp[i+1][k-1]); } if(k-1==i&&k+1==j){ dp[i][j]=1; } if(i+1<=k-1&&k+1<=j-1) dp[i][j]=max(dp[i][j],(dp[i+1][k-1]&dp[k+1][j-1])); if(i+1<=j-1) dp[i][j]=max(dp[i][j],dp[i+1][j-1]); } } } } if(dp[1][n]==1){ cout<<"YES"<<endl; } else{ cout<<"NO"<<endl; } } return 0; }