タイトル説明
正の整数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 ; }