描述:计算存在的最长回文串长度 #include <cstdio> #include <cstring> #include <cstdlib> int n,sum; char str[1010]; int v[1010][1010]; int max(int x,int y) { return x>y?x:y; } int dp(int x,int y) { if(v[x][y]) return v[x][y]; if(x==y) return v[x][y]=1; if(x>y) return 0; if(str[x]==str[y]) v[x][y]=dp(x+1,y-1)+2; else v[x][y]=max(dp(x+1,y),dp(x,y-1)); return v[x][y]; } int main() { // freopen("a.txt","r",stdin); while(scanf("%d",&n)!=EOF) { getchar(); for(int i=0; i<n; i++) { memset(v,0,sizeof(v)); gets(str); printf("%d\n",dp(0,strlen(str)-1)); } } return 0; }