골드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;
}
'알고리즘' 카테고리의 다른 글
불량 사용자 [2019 카카오 겨울 인턴쉽] C++ DFS Set 을 이용한 풀이 (0) | 2020.09.12 |
---|---|
경주로 건설 - 카카오 2020 C++ DFS 코딩테스트 풀이 (1) | 2020.09.11 |
보석 쇼핑 [카카오 2020 인턴 코딩테스트] C++ 투포인터 간단 명확 풀이 (0) | 2020.09.06 |
댓글