W - palíndromo HDU - 1513

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 ; 
}

 

Supongo que te gusta

Origin www.cnblogs.com/Accepting/p/12526660.html
Recomendado
Clasificación