컴퓨터 공학 기초/알고리즘 (브루트포스)
백준 14501 (퇴사)
JongSeok_12
2020. 7. 15. 19:42
https://www.acmicpc.net/problem/14501
14501번: 퇴사
첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.
www.acmicpc.net
풀이
DFS 재귀함수를 사용하여 풀면 되는 간단한 문제이다.
조건을 정리하면 다음과 같다
1. N이 주어지며 N + 1 일째 되는날 퇴사를 한다. 따라서 일을 수행할 수 있는 날은 N일 까지이다
2. 상담시 당일을 포함하여 날짜를 계산
EX ) 1일에 상담을 실시하며 1일에 수행하는 상담 소요일이 2일 일경우 1, 2 일 이렇게 총 2틀이 소요 됨 따라서 다음 상담은 3일에 가능하다. 따라서 당일 + 상담 소요일을 하면 다음 상담 가능 날짜가 구해진다. 이때 주의를 해야하는 부분이 마지막 날 일 경우이다 만약 N == 7 일 경우 7일째 상담에 소요되는 시간이 하루라면 7 + 1 = 8 이 됨으로 상담 가능 일의 최대는 N + 1 과 같거나 작을때로 가정해야함
#include <iostream>
using namespace std;
int dayList[1500];
int daymn[1500];
int maxDay = 0;
int maxx = 0;
void dfs(int day, int sum){
if (maxx < sum) maxx = sum;
for (int i = day; i < maxDay + 1; ++i){
if (i + dayList[i] <= maxDay + 1){
dfs(i + dayList[i], sum + daymn[i]);
}
}
}
int main(){
freopen_s(new FILE*, "tes.text", "r", stdin);
cin >> maxDay;
for (int i = 1; i <= maxDay; ++i){
cin >> dayList[i] >> daymn[i];
}
dfs(1, 0);
printf("%d", maxx);
}