最大重み矩形RQNOJ 106

タイトル説明

正の整数N(N <= 100)を与えられ、その後、N * Nの行列を入力します。最大重み矩形行列を求め、つまり、行列の各要素は、重みは、整数で定義され、重量を有しています。そこから最大であり、すべての要素が含まれている四角形、長方形の無制限のサイズを、見つけることができます。行列の各要素に属する[-127127]

例:

92:左下隅にある0-2-70

9 2-6 2-4 1

-4 1-4 1 -1 8

-180-2と15

 
入力形式

最初の行:nは、n個の行とn列が続きます。

 

出力フォーマット

最大矩形(部分行列)と。

 

サンプル入力

4
0 -2 -7 0
 9 2-6 2
-4 1-4 1
-1 8 0 -2

サンプル出力
15
 
ソリューション:暴力はDP、Oの複雑さ(N ^ 3)を追加
#include <ビット/ STDC ++ H> のconst int型 MAXN = 205 int型の合計[MAXN] [MAXN]。INT のmain()
{ int型のn; 
    scanf関数(" %のD "、&N)
    以下のためにint型 i = 1 ; iは= N <; I ++ のためのINT J = 1 ; J <= nであり、j ++ 
        { 
            scanf関数(" %のD "、&和[I] [J])。
            和[I] [J] + =和[I]、[J- 1 ]。
        } int型

 



    
    = ANS - 0x3f3f3f3f ;
     のためのint型 L = 1。 ; L <= N-; L ++ のためのINT R&LT = L; R&LT <N- =; R&LT ++ 
        { 
            int型 TANS = 0 ;             //が再開されるたびに注意してください0として分類
            するためにINT H = 1 ; H <= N-; H ++ 
            { 
                IF(TANS <= 0)TANS = SUM [H] [R&LT] -sum [H] [L- 1 ];
                 他の TANS + = SUM [ H] [R&LT] -sum [H] [L- 1 ]; 
                ANS = STD :: MAX(ANS、TANS)。
            } 
        } 

    のprintf(" %d個の\ n " 、ANS)。
    リターン 0 ; 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/Yokel062/p/11505789.html