P1387 + P1736 원래 물고기 최대 자승법 (DP + 전처리 사각형의)

최대 광장

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 }

 

추천

출처www.cnblogs.com/greenofyu/p/12236157.html