#include int min(int a, int b) { if (a < b) return a; else return b; } int main() { ifstream input; ofstream output; int n, i, length; int additions1[5100]; int additions2[5100]; int additions3[5100]; input.open ("palin.in"); output.open ("palin.out"); char string[5100]; input >> n; input >> string; for (i = 0; i < n; i++) { additions1[i] = 0; if (i != n-1) { if (string[i] == string[i+1]) additions2[i] = 0; else additions2[i] = 1; } } for (length = 3; length <= n; length++) { for (i = 0; i <= n-length; i++) { if (string[i] == string[i+length-1]) { additions3[i] = 1 + min(additions2[i], additions2[i+1]); additions3[i] = min(additions3[i], additions1[i+1]); } else additions3[i] = 1 + min(additions2[i], additions2[i+1]); } for (i = 0; i < n; i++) { additions1[i] = additions2[i]; additions2[i] = additions3[i]; } } output << additions3[0] << "\n"; input.close(); output.close(); return 0; }