알고리즘 :: 백준 :: Bruteforce :: 14501 :: 퇴사

Embedded June·2020년 8월 8일
0

알고리즘::백준

목록 보기
31/109

문제

각 날짜에는 위와같이 상담 소요일과 수익이 나타난다. 주어진 상황에서 얻을 수 있는 최대 수익을 나타내시오.

문제접근

가장 기본적인 형태의 bruteforce 문제인데 스스로의 힘으로 풀지 못해서 너무 아쉽고 분했다...ㅠ

  • 가장 기본적인 형태의 bruteforce 문제다.
  • 각 날짜에 대해서 우리가 내릴 수 있는 결정은 선택한다선택하지 않는다이므로 총 시간복잡도는 O(2N)O(2^N)이다.
  • 0번 인덱스(1일) 부터 시작해서 선택하는 경우에 대한 재귀선택하지 않는 경우에 대한 재귀을 수행하고, 재귀의 결과가 기존의 결과보다 크다면 값을 갱신해주는 전략을 사용하고자 한다.

코드


#include <iostream>
using namespace std;

static int N, ans;
static pair<int, int> consult[15];

void solve(int day, int sum) {
	if (day > N) return;
	if (day == N && ans < sum) {ans = sum; return;}
	solve(day + 1, sum);		// 해당 날짜를 선택하지 않는 경우
	solve(day + consult[day].first, sum + consult[day].second);	// 선택하는 경우
}

int main() {
	ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
	cin >> N;
	for (int i = 0; i < N; ++i) cin >> consult[i].first >> consult[i].second;
	solve(0, 0);
	cout << ans << '\n';
}

결과

profile
임베디드 시스템 공학자를 지망하는 컴퓨터공학+전자공학 복수전공 학부생입니다. 타인의 피드백을 수용하고 숙고하고 대응하며 자극과 반응 사이의 간격을 늘리며 스스로 반응을 컨트롤 할 수 있는 주도적인 사람이 되는 것이 저의 20대의 목표입니다.

0개의 댓글