최대 광장
1 // 최대 전체 매트릭스 01 찾을 정사각형 및 출력측 길이 2 #INCLUDE <iostream> . (3) #INCLUDE <cstdio> . 4 #INCLUDE <cstdlib> . 5 #INCLUDE <cmath> . 6 #INCLUDE <CString을 > . 7 #INCLUDE <알고리즘> . 8 #INCLUDE <cmath> . 9 #DEFINE LL 긴 롱 10 은 USING 스페이스 STD] . 11 INT MP [ 109 ] [ 109 ] (12)는 INT F [ 109 ] [ 109 ] 13는 INT m, N-; 14 (15) INT주 () 16 { 17 CIN >> >> N m; 18 대 ( INT 나 = 1 ; i가 <= N; I ++ ) 19 { 20 대 ( INT J = 1 ; J <= m; J ++ ) 21 { 22 CIN >> MP [I] [J] 23 } 24 } 25 INT의 입술 = 0 ; 26 대 ( INT 난 = 1 ; 나는 <= N; I ++ ) 27 { (28) 에 대해( 지능 J = 1. , J <= m; J ++ ) 29 { 30 IF (MP가 [I]가 [J]) (31)은 F [I] [J] = 분 (분 (F [I- . 1 ] [J], F [I] [J- 1이다. ), F [I- 1이다. ] [J- 1이다. ]) + 1이다. ] // 그렇지 않으면 의도 한 타이틀되지 않을 수도 세 방향 (가장 작은으로부터 선택된 하나) 인 경우 32 다른 (33)은 F [I]는 [J] MP는 = [I]는 [J]; // 0 0 기입한다 (34)는 RES = 맥스 (F [I] [J] RES) 35 } 36 } 37 COUT << RES; (38) 반환 0; 39 }
크리 에이 티브 생선 법
1 // 유사한 P1387 큰 정방형 2 // 자석 01은 정방 행렬 큰 단위 출력측 길이를 찾을 수있다 (3). #INCLUDE <iostream> 4. #INCLUDE <CString을> 5. 은 USING 스페이스 STD를] . 6 CONST의 INT = N (3000) ] . 7 BOOL MP는 [N] [N] . 8 INT S1 [N] [N], S2는 [N]가 [N]; // S1 횡 0의 수를 나타내고, S2는 길이 0의 수를 나타내고 9. INT F [N] [N]; // 정사각형 측면 길이 10 INT 본체 ( 무효 ) . 11 { 12이다 : STD :: 아이폰 OS sync_with_stdio ( 거짓으로 ); 13 INT N, m; 14 CIN >> >> N m; 15 대 ( INT 나 = 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 난 = 1 ; 나는 <= 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 [Ⅰ- 1 ] [J] + 1; 35 } 36 또 37 { 38 F [I] [J] = 분 (F [Ⅰ- 1 ] [J = 1 , 분 (S1 [I] [J = 1 ], S2 [I- 1 ] [J] )) + 1 ; 39 ANS = 최대 (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는 <= N-; I ++ ) 48 { (49) 에 대한이 ( INT는 m = J, 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 [Ⅰ- 1 ] [J + 1 ] 분 (S1 [I] [J + 1 ], S2 [I- 1 ] [J])) + 1 ; 59 ANS = 최대 (ANS, F [i]는 [J]); 60 } 61 } 62 } 63 COUT << ANS << ENDL; 64 반환 0 ; 65 }