질문의 의미 : 비용 값 N 간격은, 적어도, 얼마나 많은 가격 범위 [M, E] 덮여달라고 요청
포털 : https://vjudge.net/problem/POJ-3171
실제로 매우 간단한 DP :, DP [J]이다 최소 비용 DP [J] = 분 {DP [J], (DP)을 포함하는 J의 (S)를 나타내고, [K] (t1-1 <= k는 <= T2-1) 선정 + [I]}. 나는 오른쪽 끝 지점의 종류, 그리고 다음 따라서 순서의 각 업데이트를 보장한다. 코드에서 특정보세요.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 // 투쟁을 중단하고 당신이 살고 중단 이 사용법 #include <iostream> 3 사용법 #include <cmath> 4 사용법 #include <cstdio> 5 사용법 #include <CString을> 6 사용법 #include <알고리즘> 7 사용법 #include <큐> (8) 의 #include <벡터> 9 #INCLUDE < 설정 > 10 #INCLUDE <지도> 11 #INCLUDE <적층> 12 이용한 스페이스 성병; 13 타입 정의 긴 긴 LL; 14 CONST INT INF = 0x3f3f3f3f ; 구조체 노드 { 16 INT의 L, R, V; 17 부울 연산자 <( CONST 노드 b) CONST { 18 반환 R < BR; 19 } 20 } A [ 10000 + 9 ]; 21 의 INT TR [ 880000 ]; (22) 보이드 빌드 ( INT의 L, INT의 R, INT O) { 23 일 경우 (L == R) { 24 TR [0] = INF; 25 복귀 ; (26) } 27 INT m = (L +에서의 R) / 2 ; 28 빌드 (L, M, O << 1 ); 29 빌드 (m + 1 << O, R, 1 | 1 ); 30 TR [0] = 분 (TR [O << 1 , TR] [0 << 1 | 1 ]); 31 창 ; 32 } 33 INT 쿼리 ( INT L, INT의 R, INT의 O, INT의 X, INT의 Y) { 34 의 경우 (X <= 1 && R <= y)를 반환 TR [0]; (35) INT m = (L +의 연구) >> 1 ; 36 INT ANS = INF; 37 의 경우 (X <= m) ANS = 분 (ANS 쿼리 (L, M, O << 1 , X, Y)); 38 의 경우 (예> m) ANS = 분 (ANS 쿼리 (m + 1 , R, O << 1 | 1 , X, Y)); 39 리턴 ANS; 40 } 41 무효 업데이트 ( INT의 L, INT의 R, INT의 O, INT의 X, INT의 V) { 42 의 경우 (L == R) { 43 TR [0] = V; (44) 반환 ; 45 } 46 INT m = (L +의 연구) >> 1 ; (47) 의 경우 (X <= m) 업데이트 (L, M, O << 1 , X, V); 48 다른 업데이트 (m + 1 O, R, << 1 | 1 , X, V); 49 TR [0] = 분 (TR [O << 1 , TR] [0 << 1 | 1 ]); 50 } 51 INT 의 main () { 52 INT의 N, S, T,는 scanf ( " % D % D % D " , 및 N, S, t); 53 T- = S- 2 ; (54) 위한 ( int로 I = 1 ; i가 = N <; ++ I) { 55 는 scanf ( " % D % D % D ' , A [i]를 .L, A [i]를 .R, & A [I] .V) ; 56 A [i]를 .l- = S- 2 ; 57 A [i]를 .r- = S- 2 ; 58 } 59 S = 2 ; 60 정렬 (A + 1 , A + 1 + N); 61 빌드 ( 1 , t, 1 ); 62 업데이트 ( 1 , t, 1 , 1 ,0 ); 63 // 업데이트 (1, t, 1,2,0); (64) 에 대한이 ( 값 int = 1을 1 ; 나는 = <N; ++ I) { 65 INT의 TEM 쿼리 = ( 1 , t, 1 , A [i]를 .l- 1 , A [i]를 .r- 1 ); 66 INT INI 쿼리 = ( 1 , t, 1 , A [i]를 .R, A [i]를 .R); (67) 만약 (TEM + A [I] .V <INI) 업데이트 ( 1 , t, 1 , A [i]를 .R, TEM + A [I] .V); 68 } 69 INT ANS 쿼리 = ( 1 , t, 1 , t, t); (70) 경우 (ANS == INF) 풋 ( " -1 " ); 71 다른에서 의 printf ( " %의 D " , ANS); 72 반환 0 ; 73 }