Sujeto al efecto:
mínima de inserción de caracteres, de modo que las cadenas originales se convierten en secuencia palindrómica.
solución:
problema LCS, invertir la cadena, y la cadena de solicitud tal vez LCS, a LCS restando la longitud total (pluralidad de conjuntos de entrada).
N es el más grande 5E3, matrices bidimensionales directos son super memoria. Así que utilice para desplazarse a través de la matriz .
código:
#include <bits / STDC ++ h.> usando espacio de nombres std; const int = N 5E3 + 7 ; int dp [ 2 ] [N]; Char s1 [N], s2 [N]; int main () { int n; ios :: sync_with_stdio ( 0 ); mientras que (cin >> n) { memset (dp, 0 , sizeof dp); cin >> s1 + 1 ; para ( int i = 1 ; i <= n; i ++) s2 [i] = s1 [i]; revertir (s1 + 1, s1 + 1 + n); para ( int i = 1 ; i <= n; i ++ ) para ( int j = 1 ; j <= n; j ++ ) { si (s1 [i] == s2 [j]) dp [i% 2 ] [j ] = max (dp [i% 2 ] [j], dp [(i- 1 )% 2 ] [j- 1 ] + 1 ); más dp [i% 2 ] [j] = max (dp [(i- 1 )% 2 ] [j], dp [i% 2 ] [j- 1 ]); } cout<< n-dp [n% 2 ] [n] << endl; } Volver 0 ; }