[暴力]JZOJ 3229 回文子序列

説明

パリンドローム配列は、対称的な配列を指します。たとえば、12321はパリンドローム配列であるが、12322ません。私たちは、N×M行列のセットを与える、あなたは、各列及び各行のサブ行列が回文配列されているように、この行列からP×Pの部分行列を見つける必要があります。
 

入力

最初の行は2つの正の整数N、Mを有しています

N行続いて、各要素は、N×Mマトリクスの行列が31415926の値を越えない正の整数で表します。

出力

最大出力サイズP.修飾サブマトリックス
 

サンプル入力

5 10 
1 2 3 3 2 4 5 6 7 8
1 2 3 3 2 4 5 6 7 8
1 2 3 3 2 4 5 6 7 8
1 2 3 3 2 4 5 6 7 8
1 2 3 9 10 4 5 6 7 8

サンプル出力

4
 

データ制約

データ1≤Nの20%、M≤10のための

すべての1≤N、M 300≤データ

分析

バオが質問、私のコードの正しさに疑問、データ、あまりにも多くの水をカブス

各点は、最長下方プレコンディショニングの最長文字列の長さと文字列長と右行列の左上隅であります

そして、暴力列挙点は、軽く渡されるかを決定します

 

書式#include <iostreamの> 
の#include <cstdioを>
 使用して 名前空間はstdを、
CONSTの INT N = 3E2 + 10 INTのN、M。
INT [N] [N]。
INTのpHを[N] [N]、PL [N] [N]、ANS。
文字列sの。
ブールB; 

INT メイン(){ 
    scanf関数(" %d個の%のD "、&​​N、&M)。
    以下のためにint型 I = 1、I ++; iは= N < のためのINT J = 1 ; J <= Mであり、j ++)のscanf(" %d個"、&[I] [J])。
    以下のためにint型 i = 1 ; iが<= N; I ++ のためのINT J = 1 ; J <= Mであり、j ++ ){
             int型の H = 0、L = 0 int型の k個++; <= M kはK = J のためのINT ; p <=(J + K)/ P = J 2 ; P ++ 場合!([I] [P] = [I] [ + J]-Pをk)を破ります他の 場合(P ==(J + K)/ 2)H = K-J + 1;
            int型 K = I; K <= N; ++ k個のためのint型 P = I; p <=(I + K)/ 2であり; p ++ 場合!([P] [J] = [K-P + I] [J])ブレーク他の 場合(Pの==は(iはK + 1)/ 2)L = K-I + 1 
            pH値[I] [J] = hの; PL [I] [j]は= L。
        } 
    のためにint型 i = 1 ; iがn = <; I ++ のためのINT J = 1 ; J <= Mであり、j ++ ){
             int型MNA =分(PH [I]、[J]、PL [I] [J]); B = 1 以下のためにint型 ; kはK = iは<= iはmna- + 1 ; kは++ であれば(私は[K] [J]のpHを+ - 1 > = K)MNA = 分(MNA、pHは[K] [J])。
                    { 
                        B = 0 破ります; 
                    } 
            のためのint型 K = J、K <= J + mna- 1 ; kは++ 場合(J + PL [i]は[K] - 1 > = K)MNA = 分(MNA、PL [i]は[K]) ;
                    他の{
                        B = 0 破ります; 
                    } 
            もし、(B)ANS = MAX(ANS、MNA)。
        } 
    のprintf(" %dの" 、ANS)。
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/mastervan/p/11117928.html