Recent Posts
Notice
No Rules Rules
주유소 (feat. 백준, 13305번) 본문
728x90
반응형
주유소
https://www.acmicpc.net/problem/13305
13305번: 주유소
표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1
www.acmicpc.net
반응형
// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
using namespace std;
long long dist[100000], cost[100000];
int main() {
ios::sync_with_stdio(false), cin.tie(NULL);
register long long ans = 0, tmp;
register int N;
cin >> N;
for (register int n = 0; n < N - 1; ++n)
cin >> dist[n];
for (register int n = 0; n < N; ++n)
cin >> cost[n];
tmp = cost[0];
ans = tmp * dist[0];
for (register int n = 1; n < N; ++n) {
if (tmp < cost[n])
ans += dist[n] * tmp;
else
tmp = cost[n], ans += dist[n] * tmp;
}
cout << ans;
return 0;
}
// *&)*@*
문제에서 주어진 아래 그림을 예로 보겠습니다.
- 동그라미 5, 2, 4, 1는 리터당 가격입니다. 각각을 C1, C2, C3, C4 라고 해보겠습니다.
- 직선 2, 3, 1은 거리 입니다. 각각을 D1, D2, D3 이라고 해보겠습니다.
- D1만큼 가기 위해서는 무조건 C1에서 주유해야 합니다. 따라서 tmp라는 변수에 C1을 넣어보겠습니다. 최초의 주유 가격은 2 * 5 = 10 입니다. 정답이 10보다 작을 수는 없습니다.
- C1은 C2보다 큽니다. 따라서 D2는 C2에서 주유하는게 더 이득입니다. 따라서 tmp라는 변수에 C2를 넣어보겠습니다. 그리고 누적 주유 가격 10에 2 * 3 을 더하여 16이 됩니다.
- C2는 C3보다 작습니다. 따라서 D3는 C2에서 주유했어야 더 이득입니다. 따라서 tmp라는 변수를 갱신하지 않습니다. 따라서 16 + tmp * D2 = 16 + (2 * 1) = 18 입니다.
- 이를 점화식으로 만들면 다음과 같습니다.
tmp = C1; total_cost = D1 * tmp; if Cn-1 < Cn total_cost += Dn * tmp; else tmp = Cn; total_cost += Dn * tmp; |
728x90
반응형
'생활 > 코테' 카테고리의 다른 글
제로 (feat. 백준, 10773번) (0) | 2022.08.11 |
---|---|
스택 (feat. 백준, 10828번) (0) | 2022.08.11 |
그룹 단어 체커 (feat. 백준, 1316번) (0) | 2022.08.11 |
크로아티아 알파벳 (feat. 백준, 2941번) (0) | 2022.08.11 |
다이얼 (feat. 백준, 5622번) (0) | 2022.08.11 |
Comments