最大の広場
1 // 最大フルマトリックス01を発見正方形、および出力側の長さ 2の#include <入出力ストリーム> 。3の#include <cstdioを> 4の#include <cstdlib> 5の#include <cmath> 6の#include <CStringの> 7の#include <アルゴリズム> 8の#include <cmath> 9 の#define LLロングロング 10 使って 名前空間STD; 11 INT MP [ 109 ] [ 109 ]; 12である INT F [ 109 ] [ 109 ]; 13である 整数M、N-; 14 15 INTmain()の 16 { 17 CIN >> N >> M。 18 のために(INT iは= 1 ; iが<= N; I ++ ) 19 { 20 のために(INT J = 1 ; J <= Mであり、j ++ ) 21 { 22 CIN >> MP [I] [J]。 23 } 24 } 25 のint RES = 0 。 26 のために(INTは iは= 1 ; I <= N; I ++ ) 27 { 28 用(のInt J = 1。 ; J <= M; J ++ ) 29 { 30 IF (MPは、[I]は[J]) 31である F [I] [J] =最小(MIN(F [I- 1 ] [J]、F [I]、[J- 1 ])、F [I- 1 ] [J- 1 ])+ 1 ; // それが三の方向(最小から選択される一つである場合、そうでなければ、意図するタイトルを満たしていない可能性があります) 32 他 33である ; F [I] [J] MP = [I] [J] //は0を埋めることである 34がある RES = 、MAX(F [I]、[J]、RES) 35 } 36 } 37 [ COUT << RES。 38 リターン 0; 39 }
クリエイティブ魚の法則
1台の // 類似P1387最大正方形 2 // 磁石01を使用すると、正方行列最大部、出力側の長さを見つけるせている 3。の#include <入出力ストリーム> 4。の#include <CStringの> 5。 使用した 名前空間STDを、 図6 のconst int型 = N 3000 ; 7 BOOL MP [N] [N]; 8 INT S1 [N] [N]、S2 [N] [N]; // S1が横0、S2の数を表し、縦ゼロの数を示している 9。 INT F [N] [N]; // の四角辺の長さ 10 INTメイン(ボイド) 11 { 12は :: STD :: IOSのsync_with_stdio(falseに)。 13 整数N、M。 14 CIN >> N >> M。 15 のために(INT iは= 1 ; iが<= N; I ++ ) 16 { 17 のために(INT J = 1 ; J <= Mであり、j ++ ) 18 { 19 CIN >> MP [I] [J]。 20 } 21 } 22 // 左上到右下 23 のmemset(S1、0、はsizeof (S1))。 24 のmemset(S2、0、はsizeof (S2))。 25 memsetの(F、0、はsizeof (F))。 26 INT ANS = 0 。 27 のために(INT iが= 1 ; iが<= N; I ++ ) 28 { 29 のために(INT J = 1 ; J <= Mであり、j ++ ) 30 { 31 であれば(MP [I] [J] == 0 ) 32 { 33の S1 [i]は[J] = S1 [i]は[J- 1 ] + 1 。 34 S2 [i]は[J] = S2 [I- 1 ] [J] + 1; 35 } 36 他の 37 { 38 F [I] [J] =分(F [I- 1 ] [J- 1 ]、分(S1 [i]は[J- 1 ]、S2 [I- 1 ] [J] ))+ 1 。 39の ANS = MAX(ANS、F [i]は[J])。 40 } 41 } 42 } 43 // 右上到左下 44 のmemset(S1、0、はsizeof (S1))。 45 のmemset(S2、0、はsizeof (S2))。 46 memsetの(F、0、はsizeof (F)); 47 のために(INT I =は1。 ; I <; I ++ = N- ) 48 { 49 のために(INT J = M; J> = 1 ; J、 ) 50 { 51は、 IF(MP [I] [J] == 0 ) 52であり 、{ 53は S1 [I] [J] = S1 [I]、[J + 1 ] + 1 ; // こことき、上から下へ、右横左に追加されるべきであることに留意 54 S2 [I] [J] = S2 [I- 1 ] [J] + 1 ; 55 } 56 他の 57 { 58 F [I] [J] =分(F [I- 1 ] [J + 1 ]、分(S1 [i]は[J + 1 ]、S2 [I- 1 ] [J]))+ 1 ; 59の ANS = MAX(ANS、F [i]は[J])。 60 } 61 } 62 } 63 COUT << ANS << ENDL。 64 リターン 0 ; 65 }