Write a program to determine the length of the longest palindrome you can get from a string.
Input and Output
The first line of input contains an integer T (≤ 60). Each of the next T lines is a string, whose length is always less than 1000.
For ≥90% of the test cases, string length ≤ 255.
For each input string, your program should print the length of the longest palindrome you can get by removing zero or more characters from it.
Sample Input
2 ADAM MADAM
Sample Output
3 5
Problemsetter: Raymond Chun ---------------
听说有空串,所以必须用gets()
---------------
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s[1111];
int f[1111][1111];
int n;
int dfs(int l,int r)
{
if (f[l][r]!=-1) return f[l][r];
if (r-l<1) return 0;
int ret=0;
if (s[l]==s[r])
{
ret=dfs(l+1,r-1);
}
else
{
ret=min( dfs(l+1,r), dfs(l,r-1) )+1;
}
f[l][r]=ret;
return ret;
}
int main()
{
int T;
scanf("%d",&T);
getchar();
while (T--)
{
memset(f,-1,sizeof(f));
//scanf("%s",s+1);
gets(s+1);
n=strlen(s+1);
int ans=dfs(1,n);
printf("%d\n",n-ans);
}
return 0;
}