W - Palindrome HDU - 1513

Sous réserve de l'effet:

insertion de caractères minimum, de sorte que les chaînes originales deviennent séquence palindrome.

solution:

  LCS problème, inverser la chaîne, la chaîne demande peut-être LCS, pour LCS soustrayant la longueur totale (pluralité d'ensembles d'entrée).

  N est le plus grand 5E3, tableaux à deux dimensions directes sont super mémoire. Il faut donc utiliser pour faire défiler le tableau .

  code:

  

#include <bits / stdc ++ h.>
 en utilisant l'  espace de noms std;
const  int N = 5E3 + 7 ;
int dp [ 2 ] [N];
carbonisation s1 [N], s2 [N];
int main () {
     int n; 
    ios :: sync_with_stdio ( 0 );
    tandis que (cin >> n) { 
        memset (dp, 0 , sizeof dp); 
        cin >> s1 + 1 ;
        pour ( int i = 1 ; i <= n; i ++) s2 [i] = s1 [i]; 
        inverser (s1 + 1, s1 + 1 + n);
        pour ( int i = 1 ; i <= n; i ++ )
             pour ( 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 );
                d'autre dp [i% 2 ] [j] = max (dp [(i- 1 )% 2 ] [j], dp [i% 2 ] [j- 1 ]); 
            } 
        cout<< n-dp [n% 2 ] [n] << endl; 
    } 

    Retour  0 ; 
}

 

Je suppose que tu aimes

Origine www.cnblogs.com/Accepting/p/12526660.html
conseillé
Classement