3
int countPalindromicSubsequences(string s) {6
memset(dp, 0, sizeof dp);8
for (int i = n - 1; i >= 0; i--) {10
for (int j = i + 1; j < n; j++) {12
dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1];14
dp[i][j] = dp[i + 1][j - 1] * 2;15
int left = i + 1, right = j - 1;16
while (left <= right && s[left] != s[i]) left++;17
while (left <= right && s[right] != s[i]) right--;20
else if (left == right)23
dp[i][j] -= dp[left + 1][right - 1];25
dp[i][j] = (dp[i][j] + MOD) % MOD;28
return (int)dp[0][n - 1];