[ブルーブリッジカップ2016予選]パスワードオフ

トピックリンク:http://oj.ecustacm.cn/problem.php?id=1288

 

 

惑星Xの考古学者は、古代の滞在パスワードの数を発見しました。これらのパスワードは、A、B、C、D 4植物種子配列によって張られます。
慎重な分析は、これらのパスワード文字列の前と後に、元の(つまり、私たちはミラーリングされた文字列を言う)対称でなければならないことがわかりました。
そのため、年齢の、多くの種子が落ちるため、機能ミラーを失う可能性があります。
あなたの使命は:今、パスワード文字列を設定して元の状態から、計算を見て、それは少なくとも、多くの種子が落ちるか、それが今日である何になる可能性がなければなりません。

エントリー

今パスワード文字列(多くて1000年以上の長さ)を参照して示されるテストデータ入力の複数の組、各テストのための入力ライン、

輸出

種子の少なくとも数を表す出力正の整数必要な試験データの各セットのために落ちます。

サンプル入力  のコピー

ABCBA 
ABDCDCBABC

サンプル出力  のコピー

0 
3

 

 アイデア:

それは前の段落の周期であり、背面が同じである対称文字列、(対称)であるので、それを反転するために、この文字列を考えるのは簡単です、そして、私たちは前に文字列とフリップフリップ後にそれらを文字列に行ってきましたそれ間のLCS

LCSについて明確には、それらの間の間隔があるかもしれない、連続的である必要はありません

 

書式#include <iostreamの> 
の#include <アルゴリズム> 
書式#include < 文字列 > 
の#include < 文字列の.h> 
の#include <ベクトル> 
の#include <マップ> 
書式#include <スタック> 
の#include < 設定 > 
書式#include <キュー> 
書式#include < math.h>の
書式#include <cstdioを> 
する#include <iomanip> 
書式#include <TIME.H> 
書式#include <リスト> に#define LL長い長い
 の#define INF 0x3f3f3f3f
 の#define LSうなずき<<
1つの#define

RS(NOD << 1)+1 CONST INT MAXN = 1E5 + 10 constの LL MOD = 20010905 ; int型 DP [ 1010 ] [ 1010 ]; INT メイン(){ 
    のstd :: 文字列A、B。
    一方、(STD :: CIN >> ){ 
        memsetの(DP、0はsizeof (DP))。
        B = INT LEN = a.length()。
        std ::リバース(b.begin()、b.end()); 以下のためにint型私は= 1 ; I <= LEN; I ++

 




        ){
             ためINT J = 1 ; J <= LENあり、j ++ ){
                 場合([I - 1 ] == B [J - 1 ])
                    DP [I] [J] = DP [I - 1 ] [J - 1 ] + 1 { 
                    DP [I] [J] = STD :: MAX(DP [I - 1 ] [j]は、DP [I]、[J - 1 ])。
                } 
            } 
        } 
        のstd :: COUT <<でlen - DP [LEN] [LEN] << はstd :: ENDL。
    } 
    戻り 0; 
}

 

おすすめ

転載: www.cnblogs.com/-Ackerman/p/12241194.html