| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38648 | hi_hi | 【J】T3 | C++ | 通过 | 100 | 2 MS | 1028 KB | 1084 | 2025-10-18 14:39:01 |
#include<bits/stdc++.h> using namespace std; long long _,n,dp[305][305]; string s; inline long long dfs(long long l,long long r,long long op){ if(l>r)return 1; if(l==r){ return op; } if(dp[l][r]!=0 && op!=1)return dp[l][r]; if(l==r-1){ if(s[l]==s[r])dp[l][r]=1; else dp[l][r]=-1; return dp[l][r]; } for(int i=l;i<=r-1;i++){ if(dfs(l,i,-1)==1 && dfs(i+1,r,-1)==1){ dp[l][r]=1; break; } if(s[l]==s[r]){ if(dfs(l+1,i-1,-1)==1 && dfs(i+1,r-1,-1)==1){ dp[l][r]=1; break; } } } if(op==1 && dfs(l,r-1,-1)==1)dp[l][r]=1; if(dp[l][r]==0){ dp[l][r]=-1; } return dp[l][r]; } int main(){ scanf("%lld",&_); while(_--){ scanf("%lld\n",&n); cin>>s; s=" "+s; memset(dp,0,sizeof(dp)); dp[1][n]=dfs(1,n,-1); if(dp[1][n]==1){ printf("YES\n"); } else printf("NO\n"); } }