정말 부러운 상황에 있는 백준이가 퇴사를 하려한다, 상담 계획이 주어져 있을 때, 최대로 돈을 많이 벌 수 있는 금액을 출력해주자.
백준이가 퇴사 하기 전까지 최대한 많은 상담을 해야한다. 백준이가 돈을 더 벌기 위해서 일을 일부러 건너 뛰는 경우도 존재 한다.
또한 일을 하는 경우에 자신의 퇴사일이 지나는 경우에는 일을 받지 않아야 한다.
돈을 더 벌기 위해서 일을 하지 않아야 하는 경우와 퇴사일이 지나는 경우를 포함하면 총 3가지 경우가 존재한다.
DP로 구현하는 방법도 있지만 이번에는 브루트 포스를 이용해 보자
#include <iostream>
using namespace std;
const int MAX = 15;
int n;
int max_earn;
int time[MAX];
int pay[MAX];
bool check[MAX];
void solution(int pos, int sum)
{
if (pos < n)
{
int next = pos + time[pos];
if (next <= n)
solution(next, sum + pay[pos]);
else
solution(next, sum);
solution(pos + 1, sum);
}
else
{
if (max_earn < sum)
max_earn = sum;
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> time[i] >> pay[i];
for (int i = 0; i < n; i++)
solution(i, 0);
cout << max_earn;
return 0;
}
2019-02-03 00:00:18에 Tistory에서 작성되었습니다.