[BOJ][실4][13305] 주유소

문제 링크

문제링크

첫 번째 풀이 : 그리디

알고리즘

싼 지점에서 미리 사놓아야 합니다.

dp[i] : cost[0…i]까지 중 최소 값

ans = dp[i] * dist[i]

정답코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using pii = pair<int, int>;

const int MAX = 100'010;

int n, m, k;
ll cost[MAX];
ll dist[MAX];
ll dp[MAX];
ll ans = 0;
int main()
{
    //freopen("input.txt", "r", stdin);
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin >> n;
    for (int i = 0; i < n-1; i++) {
        cin >> dist[i];
    }
    for (int i = 0; i < n; i++) {
        cin >> cost[i];
    }
    dp[0] = cost[0];
    for (int i = 1; i < n; i++) {
        dp[i] = min(dp[i - 1], cost[i]);
    }
    for (int i = 0; i < n - 1; i++) {
        ans += dist[i] * dp[i];
    }
    cout << ans;

    return 0;
}

Success Notice: 수고하셨습니다. :+1:

Leave a comment