题目大意:求一个字符串中的最长字符串
解题思路:dp[i][j]表示从i位置到达j位置的最长回文字符串的长度,则如果str[i] == str[j],则dp[i][j] = dp[i+1][j-1] + (i == j ? 1 :2),如果str[i] != str[j] ,则dp[i][j] = max(dp[i+1][j],dp[i][j-1])
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 1010
char str[maxn];
int dp[maxn][maxn];
int main() {
int test,len;
gets(str);
sscanf(str,"%d",&test);
while(test--) {
gets(str);
len = strlen(str);
memset(dp,0,sizeof(dp));
for(int i = 0; i < len; i++)
dp[i][i] = 1;
for(int i = 1; i < len ; i++)
for(int j = 0; j + i < len; j++)
if(str[j] == str[j+i]) {
dp[j][j+i] = dp[j+1][j+i-1] + (j == j+i ? 1:2);
}
else
dp[j][j+i] = max(dp[j+1][j+i],dp[j][j+i-1]);
printf("%d\n",dp[0][len-1]);
}
return 0;
}