저렴한는 (LIS 프로그램 통계를) 구매

질문의 의미 : https://www.luogu.com.cn/problem/P1108

두 숫자가 구성 컬럼의 동일한 수 있다면, 우리는 그 두 개의 동일한 열을 말한다.

가장 긴 시퀀스 감소의 수를 찾는 프로그램.


에서 문제 해결  wjyyy 위대하신 하나님.

에서는 DP 공정 F 저장 어레이가 가장 긴 시퀀스 거부의 길이이며, F 첨자 F 배열 은 IS I (마지막 바깥 제외) 단부 수단 긴 시퀀스 드롭 데이터가 삭제되어, 함께 프로그램 번호 여부를 결정할 때, 따라서 더 이상 적용되지 않습니다.

우리는 처음부터 보면,

  1. 동일한 번호의 첫 번째 행의 열 다른 번호의 첫 번째 숫자의 개수, 지금 그들은, 즉 동일한 측정 할 수 있다면, 하나는 삭제한다 (처리 코드는 T [J] = 0 ). 그 뒷면에 다른 번호에 연결하고, 그들이 판단 할 수있는 경우가 서로 영향을주지 않습니다 두 시리즈. 두 열은 열 동수부터 전송 될 수 있기 때문에
  2. 동일하지 않도록 첫 번째 숫자의 행의 다른의 컬럼의 다른 번호와 동일하지, 다시 추가 상관없이, 즉 삭제되지와 첫 번째 숫자의 수는 다음 기존의 판단에 따라 계속합니다.

위의 두 점에서, 우리는 반복이 방지 이중 계산을 삭제했다.

#INCLUDE <비트 / STDC ++ H.>
 은 USING  스페이스 STD 단계;
 #DEFINE의 최대 (A, B) (A> B A :? B)
 INT A [ 5009 ], F [ 5009 ], [T (5009) ];
 // A [ I] 주가, F [i]를 대상 최장 하루 전 길이이다
 // T [i]는 i가 프로그램을 종료한다 
int 치 주 () 
{ 
    INT N-, MAXN = 0 ; 
    CIN을 >> N-;
      ( INT I = 1. ; I <= N-; I ++) CIN >> A [I], F [I] = 1이다. ]
      ( INT I = 1. ; I <= N-; I ++ ) 
    { 
        ( int 치 = J 1. , J는 <I, J ++ ) 
        { 
            IF (A는 [I]는 < A [J]) 
                F는 [I]는 = 최대 (F [I], F는 [J]는 + 1이다. ) 
        } //이 이제 긴 정상적인 감소 시퀀스 시크 
        MAXN가 = 최대 (MAXN, F [I]) // 최장 길이 참고 
         ( INT J = 1. , J <I, J ++ ) 
        { 
            IF (F [I] == F를 [J] && A [I] == A [J]) // 동일한 길이와 동일의 열의 개수 
                T [J] = 0 ;
             다른  IF (F [I] == F [J] + . 1 && A [I] <A [J]) // 의 전면에 접속 될 수있다
                t [I] + = t [J] 
        } 
        경우 (t [I]!) t [I] = 1 ; // 为了后面的数转移
    }    
     INT ANS = 0 ;
    위한 ( INT 난 = 1 ; I <= N; I ++ )
         의 경우 (F [I] == maxn) ANS + = t [I]; 
    COUT << maxn << "  " << ANS; 
}

 

추천

출처www.cnblogs.com/iss-ue/p/12501951.html