첫 느낌에서 DP의 제목입니다 ,,,하지만 신중하게 데이터에있는 데이터를 읽을 후 매우 작습니다. . . . . . 그 때 나는 생각의 질문을 느낍니다.
아이디어 :
사람이 선택 사항 인 경우, 그것은 그와 동일한 값의 사람이거나 바이너리의 같은 값에, 하나는 일이 걸릴 수 있습니다. 그것을 설명
예를 들어, 예를 들면 :
이 경우에는 모든 규정 준수 규칙에 여전히 시간이 걸릴 수 있지만 없습니다. (그러나 어떠한 전이 없음)
1 #INCLUDE <iostream> 2 #INCLUDE <큐> 3 #INCLUDE <cstdlib> 4 #INCLUDE <CString을> 5 #INCLUDE <알고리즘> 6 이용한 스페이스 성병; 7 8 타입 정의 긴 긴 LL; 9 CONST의 INT의 MAXN = 7010 ; 10 LL의 B [MAXN, N, ANS, CNT; 11 LL 입술 [MAXN] [ 62 ]; 12 구조체 의 { 13 LL 자료, A, B; 14 } A [MAXN]; 15 부울 CMP ( CONST S & ACONST 들 및 b) 16 { 17 하다면 ! (AA = BA) 18 리턴 AA < BA; 19 리턴 a.id < b.id; 20 } 21 무효 체크 (LL TMP) 22 { 23 LL의 p = 60 ; 24 일 동안 (TMP) { 25 입술 [CNT] [P] = TMP 및 1 ; 26 p-- ; 27 TMP는 >> = 1 ; 28 } 29 반환 ; 30 } (31) 보이드 CHECK1 ( INT I) 32 { 33 LL 온도 [ 62 ], p = 60 ; 34 memset 함수 (온도, 0 , 는 sizeof (TEMP)); (35) 동안은 (a는 [I]는 .A) { 36 온도가 [P]가 = A [i]를 .A 및 1 ; 37 p-- ; 38 A [i]를 .A >> = 1 ; 39 } 40 대 ( INT J = 1 ; J <= CNT; J ++ ) { 41 부울 플래그 = 거짓 ; 42 대 ( INT에서 K = 0 ; K <= 60 ; k는 ++ ) { 43 의 경우 (입술 [J] [K] == 0 && 온도 [K] == 1 ) { 44 플래그 = 참 ; (45) 휴식 ; 46 } 47 } 48 의 경우 (플래그 == 거짓 ) { 49 개 의 ANS의 ANS = + A [i]를 .B; 50 체류 ; 51 } 52 } 53 창 ; 54 } 55 INT 의 main () 56 { 57 A [ 0 ] .A = - 1 ; 58 ANS = CNT = 0 ; 59 CIN >> N; (60) 에 대한이 ( int로 I = 1 ; i가 N = <; 내가 ++ ) { 61 CIN >> A [i]를 .A; 62 A [i]를 .ID = I; 63 } 64 대 ( int로 I = 1 ; i가 N = <; 내가 ++ ) { 65 CIN >> A [i]를 .B; 66 } 67 정렬 (a +1 , A + N + 1 , CMP); 68 큐 <LL> Q; (69) 동안 (! q.empty ()) 70 q.pop (); (71) 에 대한이 ( int로 I = 2 ; i가 N = <; 내가 ++ ) { 72 의 경우 (a [i]를 .A == A [I- 1 ] .A && A [I- 1 !] .A = A [I- 2 ] .A) { 73 q.push (a [i]를 .A); (74) (CNT) ++ ; (75) 검사 (A [i]를 .A); 76 } 77 } 78 대 ( INT I =1 ; 나는 <= N; 내가 ++ ) { 79 CHECK1 (I); 80 } 81 COUT << ANS << ENDL; 82 반환 0 ; 83 }