uva 11151

求最长回文串  就是将字符串翻转后求最长公子列.....

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


posted @ 2013-08-15 11:09  xlc2845  阅读(110)  评论(0)    收藏  举报