求最长回文串 就是将字符串翻转后求最长公子列.....
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
using namespace std;
char str[1010];
char re[1010];
int f[1010][1010];
int main()
{
int t;
scanf("%d",&t);
getchar();
while (t--)
{
gets(str);
int len = strlen(str);
for (int i = 0; i < len; ++i)
re[len-i-1] = str[i];
memset(f, 0, sizeof(f));
for (int i = 1 ; i <= len ; ++i)
for (int j = 1 ; j <= len ; ++j)
if (str[i-1] == re[j-1])
f[i][j] = f[i-1][j-1]+1;
else
f[i][j] = max(f[i][j-1], f[i-1][j]);
printf("%d\n",f[len][len]);
}
return 0;
}