[BOJ] 택배

Date:

[BOJ] 택배

Problem URL : 택배

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
int capacity[2001];

struct box {
    int u, v, num;
};
bool cmp(box& b1, box& b2) {
    if (b1.v == b2.v) return b1.u > b2.u;
    else return b1.v < b2.v;
}
int main(void) {
    ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    int n, c, m; 
    cin >> n >> c >> m;
    vector<box> v;
    for (int i = 0; i < m; i++) {
        box B;
        cin >> B.u >> B.v >> B.num;
        v.push_back(B);
    }
    sort(v.begin(),v.end(), cmp);
    int ans = 0;
    for (int i = 0; i < v.size(); i++) {
        int maxCapacity = 0;
        for (int j = v[i].u; j < v[i].v; j++) {
            maxCapacity = max(maxCapacity, capacity[j]);
        }
        int addNum = min(c - maxCapacity, v[i].num);
        for (int j = v[i].u; j < v[i].v; j++) {
            capacity[j] += addNum;
        }
        ans += addNum;
    }
    cout << ans;
}

Comments

도착마을이 작은(빠른) 번호일수록 그리디 성격에 부합한다.
만약 도착마을이 같은 번호이면 시작 마을을 큰(늦은) 번호로 선택해준다.

댓글