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; }