| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38596 | sea_water | 【J】T3 | C++ | 通过 | 100 | 10 MS | 432 KB | 908 | 2025-10-18 13:18:41 |
#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; } } } }