문제 풀이/백준

백준 - 퇴사 (14501) [C++]

JJJaewon 2024. 4. 2. 22:44
반응형

이 문제는 백트래킹으로 풀 수 있다.

 

입력 크기 N이 15로 매우 작다. 따라서 백트래킹으로 풀었다.

 

0일부터 시작해서, 현재 상담을 할지 말지를 결정하는 로직으로 재귀를 구성하면 쉽게 풀 수 있다.

#include <iostream>
#include <algorithm>
using namespace std;

#define MAX 15

int N;
int T[MAX];
int P[MAX];

void input() {
	cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> T[i] >> P[i];
	}
}

int solve(int day) {
	if (day == N) {
		return 0;
	}

	int result = 0;

	// jump
	if (day + T[day] <= N) {
		result = max(solve(day + T[day]) + P[day], result);
	}

	// no jump
	result = max(solve(day + 1), result);

	return result;
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	input();
	cout << solve(0) << '\n';

	return 0;
}
반응형