알고리즘과 자료구조/백준

BOJ 14501 퇴사

bggbr 2019. 12. 30. 15:46

https://www.acmicpc.net/problem/14501

 

14501번: 퇴사

첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.

www.acmicpc.net

문제 해결전략

주로 DFS 또는 DP를 이용하는 문제이다.

DFS(완전 탐색)을 이용하여 해결하였다.

처음에는 day를 순차적으로 1->2->3->4->5->6->7->8까지 보내고, 7부터 차례대로 7->6->5->4->3->2->1 내려오면서 조건 확인과 계산(재귀)을 시작한다. 그림으로 간단히 표현하면 다음과 같다. (종료 조건은 N+1이다.)

 

#include <iostream>
using namespace std; 
int n;
int t[16];
int p[16];
int maxNum;
int max(int a, int b){ return a > b ? a : b; }
void dfs(int day, int sum){
    if(day == n + 1){
        maxNum = max(maxNum, sum); 
        return;
    }
    dfs(day + 1, sum);
    if(t[day] + day <= n + 1) dfs(t[day] + day, sum + p[day]);
}
int main(void){
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> t[i] >> p[i];
    }
    dfs(1, 0);
    cout << maxNum << endl;
}

'알고리즘과 자료구조 > 백준' 카테고리의 다른 글

BOJ 14502 연구소  (0) 2020.01.04
BOJ 3190 뱀  (0) 2019.12.31
BOJ 1389 케빈 베이컨의 6단계 법칙  (0) 2019.12.27
BOJ 1012 유기농 배추  (0) 2019.12.24
BOJ 2573 빙산  (0) 2019.12.24