UVA 11151 Longest Palindrome

尽管很容易,还是贴出来吧。

#include<stdio.h>
#include<string.h>

int n, f[1000][1000], len;
char s[1010];
void solve()
{
    memset(f,0,sizeof(f));
    for(int i = 0; i < len; i ++)
     f[i][i] = 1;
    for(int k = 1; k < len; k ++)
    {
        for(int i = 0; i+k < len; i ++)
        {
            if(s[i] == s[i+k]) f[i][i+k] = f[i+1][i+k-1] + 2;
            else if(f[i+1][i+k] > f[i][i+k-1]) f[i][i+k] = f[i+1][i+k];
            else f[i][i+k] = f[i][i+k-1];
        }
    }
    printf("%d\n",f[0][len-1]);
}
int main()
{
    char a[10];
    while(gets(a) != NULL)
    {
        sscanf(a,"%d",&n);
        while(n --)
        {
            gets(s);
            len = strlen(s);
            solve();
        }
    } 
    return 0;
}
原文地址:https://www.cnblogs.com/yuzhaoxin/p/2614235.html