羅区P1169 [ZJOI2007】基板生産ライン懸濁法

トピックリンク

:吊りライン方式を初めて目「の部分行列の最大の問題を解決するための素晴らしいアイデアの使用について」

この質問のために、バリアポイントが同じポイントに現在の色で、他はうまく行うためのテンプレートとしてやりました。

書式#include <iostreamの> 
書式#include <stdio.hに> 
する#include <stdlib.h>に含ま
する#include < 文字列の.h>
 使用して 名前空間はstdを、
int型 N、M、BD [ 2010 ] [ 2010 ]、L [ 2010 ] [ 2010 ]、R [ 2010 ] [ 2010 ]、HT [ 2010 ] [ 2010 ]。

INT メイン()
{ 
    scanf関数(" %d個の%のD "、&​​N、&M)。
    以下のためにint型 I = 1 iが++; iが<= N のためのInt J = 1。 ; Jは<= M; J ++ 
        { 
            scanfの(" %D "、&BD [I] [J]); 
            L [I] [J] = J; R&LT [I] [J] = J ; HT [I] [J] = 1 ; // サスペンションワイヤは、初期値をijをする
        }
     ためINT I = 1 ; I <= N; I ++ のためのINT J = 2、J <= M; J ++ IF(!BD [I] [J] BD = [I]、[J- 1 ])
                L [I] [J] = L [I]、[J- 1 ];   // サスペンションワイヤが左IJを延長することができる
    ためint型 = Iを1 ; iは<N =; I ++ のためのINT J = M- 1 ; J> = 1 ; j-- もし!(BD [I] [J] = BD [I] [jは+ 1 ] )
                R [I] [J] = R [I] [J + 1 ]。  // 悬线IJ向右延伸
    するためのint型 I = 2、I ++; iが<= N のためのINT J = 1 ; J <= M; ++ J 場合!(BD [I] [J] = BD [I - 1 ] [J])
            { 
                HT [I] [J]HT =〔I- 1〕〔J〕+ 1 ;   // 上向きのij延びるサスペンションワイヤ 
                L [I] [J] = MAX(L [I]、[J]を、L [I- 1 ] [J]);   / / 懸濁ライン間隔IJ収縮左 
                R&LTを[I] [J] =分(R&LT [I] [J]は、R [I- 1 ] [J]);   // 右のセクションを縮小
            } 
            
    INT ANS1 = 0、ANS2 = 0 ;
     のためのINT I = 1 ; I <= N; I ++ のためのINT J = 1。 ; J <= M; J ++ 
        { 
            int型 A = R&LT [I] [J] -1- [I] [J] + 。1、B = HT [I]、[J];   //ワイヤはサスペンションワイヤの周りに延びるサスペンションの矩形の幅に対応ijは距離が、高ijは上方の距離延びijを 
            ANS1 = maxに(ANS1、分(A、B)*分(A、B));   // 四角形の対応する領域 
            ANS2 =最大(ANS2、*のB);   // 矩形領域
        } 
    のprintf(" %D \ D N-%\ N- " 、ANS1、ANS2);
     戻り 0 ; 
}

 

 

おすすめ

転載: www.cnblogs.com/BakaCirno/p/11531236.html