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