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;

}

你可能感兴趣的:(long)