PTA甲级1040,动规问题,最长回文字符串,参考博客
#include <iostream>
using namespace std;
int dp[1010][1010];
int main() {
string s;
getline(cin, s);
int len = s.length(), ans = 1;
for(int i = 0; i < len; i++) {
dp[i][i] = 1;
if(i < len - 1 && s[i] == s[i+1]) {
dp[i][i+1] = 1;
ans = 2;
}
}
for(int L = 3; L <= len; L++)
for(int i = 0; i + L - 1 < len; i++) {
int j = i + L -1;
if(s[i] == s[j] && dp[i+1][j-1] == 1) {
dp[i][j] = 1;
ans = L;
}
}
printf("%d", ans);
return 0;
}