문제

퇴사 백준 14501번


리뷰

완전 탐색으로 풀었다.

오늘 상담을 한다/안한다를 구분해서 재귀를 두 번 호출한다.


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

+ Recent posts