天天看點

Uva 11151 - Longest Palindrome

8Y

2WAbefore

空字元串也要考慮..

就是說你得用gets

就是說你得把t後面的各種破玩意無視

回文不過是和自身反序公共子列

#include<stdio.h>
#include<string.h>
char a[1010],b[1010];
int dp[1010][1010];
int max(int a,int b){
	if(a>b)return a;return b;
	}
int main(){
	int t;
	scanf("%d%*c",&t);//gets(b);
	while(t--){
		int i,j=0;
		gets(a);
		int len=strlen(a);
		for(i=len-1;i>=0;i--)b[j++]=a[i];
		for(i=0;i<len;i++)for(j=0;j<len;j++)dp[i][j]=0;
		for(i=0;i<len;i++){
			for(j=0;j<len;j++){
				if(a[i]==b[j])dp[i+1][j+1]=dp[i][j]+1;
				else dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);
				}
			}
		printf("%d\n",dp[len][len]);
		}
	return 0;
	}