알고리즘
백준 8980번 택배
sunggook lee
2020. 6. 11. 23:43
골드4 그리디 알고리즘으로 풀었다.
받는 마을 기준으로 정렬을 시킨다.
1 5 10
2 3 40
3 4 40
이런경우에도 조건을 만족하려면 받는 마을 기준으로 정렬을 시켜야 최적해를 구할 수 있다.
#include <iostream>
#include <algorithm>
using namespace std;
typedef struct Box {
int sendi;
int reci;
int boxn;
} Box;
bool comp(Box a,Box b)
{
if(a.reci==b.reci) return a.sendi < b. sendi;
return a.reci < b.reci;
}
int main()
{
int n,c;
int m;
cin>>n>>c>>m;
Box arr[m];
for(int i=0;i<m;i++)
{
cin>>arr[i].sendi>>arr[i].reci>>arr[i].boxn;
}
sort(arr,arr+m,comp);
int before=arr[0].sendi; int noww=0; int wbox[3000]={0,}; int sumbox=0;
for(int i=0;i<m;i++)
{
int maxv=-1;
for(int j=arr[i].sendi;j<arr[i].reci;j++)
{
if(wbox[j]>maxv)
maxv=wbox[j];
}
if(maxv>=c)
continue;
int addv=0;
if(maxv+arr[i].boxn<=c)
addv=arr[i].boxn;
else
addv=c-maxv;
for(int j=arr[i].sendi;j<arr[i].reci;j++)
wbox[j]+=addv;
sumbox+=addv;
}
cout<<sumbox;
}