문제
리뷰
완전 탐색으로 풀었다.
오늘 상담을 한다/안한다를 구분해서 재귀를 두 번 호출한다.
advice(day + T[day], sum + P[day]); // 오늘 상담한다
advice(day + 1, sum); // 오늘 상담 안하고 다음날로 지나간다
코드
#include <iostream>
#include <algorithm>
using namespace std;
// 퇴사
int N;
int T[16];
int P[16];
int max_sum;
void advice(int day, int sum){
if(N == day){ // 종료
max_sum = max(max_sum, sum);
return;
}
if(N < day){ // 제한 날짜 초과
return;
}
advice(day + T[day], sum + P[day]); // 오늘 상담한다
advice(day + 1, sum); // 오늘 상담 안하고 다음날로 지나간다
}
int main(void){
freopen("input.txt", "rt", stdin);
cin >> N;
for(int i = 0; i < N; i++){
scanf("%d %d", &T[i], &P[i]);
} // 입력받기 끝
advice(0, 0);
cout << max_sum;
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
연결 요소의 개수 백준 11724 BFS (0) | 2020.09.06 |
---|---|
로또 백준 6603번 (0) | 2020.09.05 |
차이를 최대로 백준 10819번 c++ (0) | 2020.09.03 |
날짜계산 백준 1476번 (0) | 2020.09.03 |
카잉달력 백준 6064번 (0) | 2020.09.03 |