int minimumPalidrome(string s) { if (s.size() <= 1) return 0; vector<vector<int> > dp(s.size(), vector<int>(s.size(), 0)); for (int i = 0; i<s.size()-1; i++) { dp[i][i+1] = s[i]==s[i+1]? 0 : 1; } for (int len = 3; len <= s.size(); len++) { for (int i = 0; i+len <= s.size(); i++) { if (s[i] == s[i+len-1]) dp[i][i+len-1] = dp[i+1][i+len-2]; else { dp[i][i+len-1] = 1 + minThree(dp[i+1][i+len-2], dp[i][i+len-2], dp[i+1][i+len-1]); } } } return dp[0][s.size()-1]; }
int maxProduct(int A[], int n) { if (!A) { return 0; } int lMinPrev = 1; int lMaxPrev = 1; int lMax = INT_MIN; int curProduct = 1; for (int i = 0; i< n; ++i) { curProduct = maxThree(lMinPrev*A[i], lMaxPrev*A[i], A[i]); lMinPrev = minThree(lMinPrev*A[i], lMaxPrev*A[i], A[i]); lMaxPrev = curProduct; if (curProduct > lMax) { lMax = curProduct; } } return lMax; }