$ 제공자의 LT [I] [J] $은 [I] [j]가 $ 먼 높이까지 연장 좌측에 도달 먼 지점에 $ RT $으로 유사 $의 HT는
자신의 위치, 높이 1의 초기 값을 설정하여 시작
전처리 피사체 연장 상태에 따라 결정되는 각 점 범위 확장 주위
그런 다음 DP 수 있습니다 :
LT [I] [J] = 최대 (LT [I] [J], LT [I-1] [J]);
RT는 [I]는 [j]가 분 = (RT [I] [J], RT [I-1] [J]);
HT [I] [J] HT = [I-1] [J] +1;
다른 블로그를 볼 수있는 특정
#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; CONST의 INT의 maxn = 2009 ; INT의 N, m, ans1, ans2; INT LT [maxn] maxn, RT [maxn] maxn, HT는 [maxn] maxn], [maxn] maxn] MP; INT 의 main () { 는 scanf ( " %의 D % d에 " , N, m); 위한 ( int로 I = 1 ; 나는 <= N; I ++ ) 대 ( INT J = 1 ; J <= m; J ++ ) { 는 scanf ( " %의 D ' , MP [I] [J]); LT [I] [J] = RT의 [I] [J] =제이; HT [I] [J] = 1 ; } 에 대해 ( int로 I = 1 ; i가 N = <I ++ ) 대 ( INT J = 2 , J <= m; J ++ ) 경우 (! MP [I] [J] = MP [I] [J = 1 ]) LT [I] [J] = LT [I] [J = 1 ]; 위한 ( int로 I = 1 ; i가 <= N; I ++ ) 대 ( INT J = M- 1 , J> = 1 ; j-- ) 경우 ! (MP [I] [J] = MP [I] [J + 1 ]) RT [I] [J]RT = [I] [J + 1 ]; 위한 ( int로 I = 1 ; i가 <= N; I ++ ) 대 ( INT J = 1 ; J <= m; J ++ ) { 경우 는 (i> 1 ! && MP [I] [J] = MP [I- 1 ] [J]) { LT [I] [J] = 최대 (LT [I] [J], LT [Ⅰ- 1 ] [J]); RT는 [I]는 [j]가 분 = (RT [I] [J], RT [Ⅰ- 1 ] [J]); HT [I] [J] = HT [Ⅰ- 1 ] [J] + 1 ; } int로 A = RT의 [I] [J] -lt [I] [J] + 1 ; INT의 B =분 (a, HT [I] [J]); ans1 = 최대 (ans1, B * b); ans2 = 최대 (ans2,는 * HT [I] [J]); } 의 printf ( " 가 % d \ n 개의 %의 D " , ans1, ans2); }