OpenJudge 1088 스키

총 시간 제한 : 1000MS 메모리 제한 : 65536kB

기술

스키는 매우 흥미로운 때문에 마이클, 이것은 놀라운 일이 아니다 백 스키를 좋아한다. 그러나 속도를 얻기 위해, 미끄러운 지역은 아래쪽으로해야합니다, 당신은 기본으로 슬라이드 할 때, 당신은 다시 학년까지로하거나 엘리베이터가 당신을 데려 갈 때까지 기다립니다. 마이클은 지역 가장 긴 산사태에 포함되어 알고 싶어한다. 영역은 2 차원 배열에 의해 주어진다. 각 숫자는 어레이의 지점의 높이를 나타낸다. 다음 예는

1   2   3   4  5 
16  17  18  19  6 
15  24  25  20  7 
14  23  22  21  8 
13  12  11  10  9

상기 높이가 감소되는 경우 만 사람이 네 개의 포인트 중 하나에 인접하는 지점에서 상하로 슬라이딩 할 수있다. 상기 예에서, 산사태 24-17-16-1 프리 런된다. 물론 25-24-23 -...- 3-2-1 이상. 사실, 이것은 긴 하나입니다.

기입

첫 번째 라인은 R 존의 입력 라인 수와 열 수 C (1 <= R, C <= 100)을 나타낸다. 다음은 각 행의 높이 (h), 0 <= h를 <= 10000를 나타내는 정수 C를 갖는 R 행이다. 출력 영역의 긴 길이.

샘플 입력

5  5 
1  2  3  4  5 
16  17  18  19  6 
15  24  25  20  7 
14  23  22  21  8 
13  12  11  10  9

샘플 출력

(25)

문제 해결 아이디어

로우에서 하이로 계산 유형 A "나에게 남자」, 최대 MAXPATH MAXPATH 각 점은 좌우 상하의 점 + 1 미만이다.

새로운 배열에 저장된 포인트를 정렬, 정렬 구현하는 방법, 정렬 기능의 사용을 검토합니다.

정렬 기능에 익숙하지 않은 때문에, 참조는 교훈으로 간주 누군가 다른 사람의 코드,이 질문에 뼈까지 이루어집니다.

AC 코드

사용법 #include <iostream> 
#INCLUDE <알고리즘> 
#INCLUDE <CString을>
 사용  스페이스 성병; 

INT의 맵 [ 105 ] [ 105 ]; // 存储高度
INT MAXPATH [ 105 ] [ 105 ];
INT의 DIR [ 4 ] [ 2 ] = {{ 1 , 0 } { 0 , 1 }, {- 1 , 0 } { 0 - 1 }}; 

구조체 노드 
{ 
    INT (X);
    INTY;
     INT H]
     부울  연산자 <( const로 노드 및 F) 을 const 
    { 
        반환 H < FH; 
    } 
} -N- [ 10100 ] 

INT 의 main () {
     INT의 R & LT, C 단계;
     int로 CNT = 0 ; // -N- [] 각도의 표준 
    INT ANS = 1. , 
    CIN >> R & LT >> C]
      ( INT I = 1. ; I <= & lt; 화학식 I가 ++) // 모서리 중 영차 행 및 공기의 영차 열 균일 
    {
          ( INT= J 1. , J <=는 C; J는 ++ ) 
        { 
            CIN >> 맵 [I] [J]을; 
            MAXPATH [I]는 [J] = 1. ; //이 . 1 초기화 
            -N- [CNT] .x를 = ; I 
            -N- [CNT를 ] .Y = J] 
            [CNT] N-.H = 맵 [I] [J]; // 데이터 노드를 판독 정렬 제조 
            ++ CNT를 ; 
        } 
    } 
    정렬 (N-, N- + CNT)
     에 대한 ( INT의 I = 0 ; I <CNT; I ++) // 모든 지점을 통해 로우에서 하이로 
    {
         INT X =N- [I] .x와;
         INT Y = N- [I] .Y;
          ( INT J = 0 ; J < 4. , J ++) // 종횡 사방 
        {
             INT XX = X + 디렉터리 [J] [ 0 ] ;
             INT YY = Y + 디렉터리 [J] [ 1. ]
             IF (XX> = 1. && XX <= R & LT && YY> = 1. && YY <= C && 맵 [X] [Y]> 맵 [XX] [YY ]) // 점 (X, Y), 그 갱신의 경과마다 
            { 
                MAXPATH [X] [Y] = 최대 (MAXPATH [X] [Y를 MAXPATH [XX] [YY] + 1이다. ), 
                ANS= 최대 (ANS, MAXPATH [X] [Y]); 
            } 
        } 
    } 
    COUT << ANS << ENDL;
    // 시스템 ( "일시 중지"); 
    반환  0 ; 
}

 

추천

출처www.cnblogs.com/yun-an/p/10964069.html