W - 回文HDU - 1513

効果の件名:

最小文字挿入、元の文字列が回文配列になるようにということ。

ソリューション:

  LCSの問題、文字列を逆にし、ストリング多分LCS要求、全長(入力の複数のセット)を減算LCSします。

  Nが最大5E3であり、直接二次元アレイは、超メモリです。そうするために使用する列をスクロール

  コード:

  

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
CONST  INT N = 5E3 + 7 INT DP [ 2 ] [N]。
チャーS1 [N]、S2 [N]。
int型のmain(){
     int型、nは 
    イオス:: sync_with_stdio(0 );
    一方、(CIN >> N){ 
        memsetの(DP、0はsizeof DP)。
        CIN >> S1 + 1 ;
        以下のためにINT iが= 1 ; I <= N; I ++)S2 [I] = S1 [i]は、
        逆(S1 + 1、S1 + 1 + N)。
        以下のためにINT iが= 1 ; I <= N; I ++ のためのINT J = 1 ; J <= nであり、j ++ ){
                 場合(S1 [i]が== S2 [J])DP [I%2 ] [J = MAX(DP [I%2 ] [J]、DP [(I- 1)%2 ] [J- 1 ] + 1 )。
                 DP [I%2 ] [J] = MAX(DP [(I- 1)%2 ] [J]、DP [I%2 ] [J- 1 ])。
            } 
        coutの<< N-DP [N%2 ] [N] << ENDL。
    } 

    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/Accepting/p/12526660.html
おすすめ