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