주제 링크 : http://codeforces.com/contest/1221/problem/D
질문 의도된다 : 시퀀스에 특정 위치 개수 인접한 시퀀스의 수와 동일하지 않도록 개정을 각각 수정 하나 그러한 다수의 각각의 변경 비용이 [I], B이며 필요한 최소한의 비용을 찾을 수 있습니다.
문제 해결 방안을 : 간단한 분석 한 결과, 우리가 알 수있는 단지 우리가 [I] [J] J를 DP를 정의하는 두 배로 각각의 수를 수정할 필요가되도록 인접한 최소 비용에서부터 전방 자리 숫자, 마지막 숫자 내가 시간을 변경했습니다. 이어서 응답이 최소 인 {DP [N] [0], DP [1] [N], (DP) [2] [N]}.
#INCLUDE <비트 / stdc ++ H.> 네임 스페이스를 사용하여 표준; 타입 정의 오래 오래 LL; CONST의 INT maxn = 3e5 + (5); CONST 게요 INF = 1E18; LL의 DP [3] [maxn]; A [maxn]를 INT, B [maxn]; 주 () {int로 INT의 Q를; scanf와 ( "%의 D", Q); {- (Q) 동안 , INT 않음 scanf와 ( "%의 D", N); {위해 (나는 ++; i가 N <I = 0 INT) ( "%의 D % d에"& A [I], B [I])를 scanf와; DP [0] [I] = INF; DP [1] [I] = INF; DP [2] [I] = INF; } DP [0] [0] = 0; DP [1] [0] = B를 [0] * 1ll; DP [2] [0] = B를 [0] * 2; 대해 INT (I = 1; i가 N <; 내가 ++) { 대 (INT의 J = 0; J <= 2, J ++) { (INT k에 대한 = 0; K <= 2; DP [J] [I] = 분 (DP [J] [i]는, DP [K] [I-1] + 1ll J *의 * B를 [I]); } } } } // 대해 (; 나는 <N; I = 0 int로 난 ++) COUT을 << DP [0] [i]는 << ''<< (DP) [1] [I] << ''<< DP [ 2] [I] << ENDL; 의 printf ( "% LLD \ 없음"분 (DP [0] [N-1], 분 (DP [1] [N-1] (DP) [2] [N-1]))); } 0을 반환; }