개발자 피터
Peter's Dev Blog
개발자 피터
전체 방문자
오늘
어제
  • 분류 전체보기 (77)
    • 🧑🏻‍💻 Develop (13)
      • Devops (3)
      • Elasticsearch (3)
      • Design Pattern (1)
      • SQL (4)
      • Architecture (1)
      • APM (1)
    • 💻 Service (7)
      • E-ROOM (3)
      • Briefing (4)
    • 💡 Problem Solving (43)
      • Baekjoon (40)
      • Programmers (2)
    • 📚 Reading (12)
      • Tech (9)
      • Self-Help (3)
    • 💬 Etc (1)
    • 📈 Retrospective (1)

블로그 메뉴

  • 🌟 깃허브
  • 🏷️ 태그 클라우드
  • 📝 방명록

공지사항

인기 글

태그

  • 백트래킹
  • 문자열
  • 브루트포스
  • 독서
  • elasticsearch
  • 백준
  • E-ROOM
  • briefing
  • SQL
  • Programmers
  • boj
  • java
  • MySQL
  • 구현
  • 그리디

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
개발자 피터

Peter's Dev Blog

[백준 - 14501] 퇴사 [C++]
💡 Problem Solving/Baekjoon

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

2021. 2. 14. 23:22
728x90
반응형

1. 문제

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

 

14501번: 퇴사

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

www.acmicpc.net

2. 풀이과정

백준이가 상담을 잡을 수 있는 모든 경우에 대해 수익을 계산해 최대 수익을 구한다.

 

입력예시

위와 같은 입력을 예로 들면

(1일, 4일, 5일)

(1일, 5일)

(2일)

(3일, 4일, 5일)

(3일, 5일)

       .

       .

 

와 같은 순서로 상담을 잡을 수 있는 모든 경우를 따져보면 된다.

[코드설명]

dfs함수는 상담을 잡을 수 있는 모든 경우에 대해 최대수익을 갱신해준다. 

 

3. 코드

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
int n;
vector<int> T, P;
bool visited[17];
int max_v = -1;

void dfs(int sum, int curr) {
    if(curr && curr + T[curr] - 1 == n) {
        max_v = max(max_v, sum);
        return ;
    }
    if(curr && curr + T[curr] - 1 > n) {
        max_v = max(max_v, sum-P[curr]);
        return ;
    }
    int start = curr ? curr + T[curr] : 1;
    for(int i=start; i<=n; i++) {
        if(!visited[i]) {
            visited[i] = true;
            dfs(sum+P[i], i);
            visited[i] = false;
        }
    } 
}

int main() {
    cin.tie(NULL);
    ios::sync_with_stdio(false);
    cin >> n;
    T.resize(n+1);
    P.resize(n+1);
    for(int i=1; i<=n; i++) {
        cin >> T[i] >> P[i];
    }
    dfs(0, 0);
    cout << max_v;
    return 0;
}
728x90
반응형
저작자표시 (새창열림)

'💡 Problem Solving > Baekjoon' 카테고리의 다른 글

[백준 - 12101] 1, 2, 3 더하기 2 [C++]  (1) 2021.03.14
[백준 - 14500] 테트로미노 [C++]  (0) 2021.03.06
[백준 - 15658] 연산자 끼워넣기 (2) [C++]  (0) 2021.01.26
[백준 - 15666] N과 M (12) [C++]  (0) 2021.01.26
[백준 - 15665] N과 M (11)  (0) 2021.01.26
    '💡 Problem Solving/Baekjoon' 카테고리의 다른 글
    • [백준 - 12101] 1, 2, 3 더하기 2 [C++]
    • [백준 - 14500] 테트로미노 [C++]
    • [백준 - 15658] 연산자 끼워넣기 (2) [C++]
    • [백준 - 15666] N과 M (12) [C++]
    개발자 피터
    개발자 피터
    Backend Engineer 🔥

    티스토리툴바