动态规划
class Solution {
public:
int longestPalindromeSubseq(string s) {
int i, j, k, n = s.size(), count(1), p(-1);
if (n < 2) return n;
fill(dp[0],dp[0]+2*1002,0);
bool f(0);
for (i = n - 1; i >= 0; --i, f = !f)
{
dp[f][i] = 1;
for (j = i + 1; j<n ; j++)
{
if (s[i] == s[j])
{
dp[f][j] = dp[!f][j-1] + 2;
}
else {
dp[f][j] = max(dp[!f][j], dp[f][j - 1]);
}
}
}
return dp[!f][n - 1];
}
private:
int dp[2][1002];
};