교육 Codeforces 라운드 73 (사업부 정격. 2) D.이 다시 큰 울타리 확인

주제 링크 : 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을 반환; 
}

  

추천

출처www.cnblogs.com/Zhi-71/p/11569072.html