[C++] 백준/Gold/15486. 퇴사 2

2025. 3. 18. 21:18·C++
목차
  1. 문제: 퇴사 2 (백준 15486번)
  2. 해결 방법: 동적 계획법 (DP)
  3. 코드 설명

문제: 퇴사 2 (백준 15486번)

문제 분석

  • 입력: N일 동안 상담을 진행할 수 있으며,
    각 상담은 걸리는 기간 Ti와 얻을 수 있는 금액 Pi를 가진다.
  • 목표: 상담을 적절히 선택하여 얻을 수 있는 최대 수익을 계산하는 문제.
  • 조건: 상담이 끝나는 날을 초과하면 진행할 수 없다.

해결 방법: 동적 계획법 (DP)

이 문제는 배낭 문제 (Knapsack Problem)와 유사하다.
각 날짜별로 상담을 선택할지 말지를 결정해야 하며, 최적의 선택을 누적하면서 해결해야 한다.

DP 테이블 정의

  • dp[i]: i번째 날까지 얻을 수 있는 최대 수익
    • 즉, i일이 끝났을 때 가능한 최대 이익을 저장한다.

점화식

  1. 현재까지의 최대 수익 유지

    dp[i]=max(dp[i],dp[i−1])

    • i번째 날까지의 최대 수익은 이전 날까지의 최대 수익과 비교하여 갱신된다.
    • 즉, 오늘 상담을 하지 않더라도 이전 날까지의 최대 수익은 유지되어야 한다.
  2. i일에 상담을 선택하는 경우
    • 상담을 하면 Ti일 후(즉, i+Ti)에 보상이 지급되므로,
      dp[i+Ti]=max(dp[i+Ti],dp[i]+Pi)
    • i+Ti가 N을 초과하면 상담을 할 수 없다.

코드 설명

#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    int n; cin >> n;
    vector<pair<int, int>> v(n);
    vector<int> dp(n + 1);

    // 상담 일정 입력
    for (int i = 0; i < n; i++)
    {
        cin >> v[i].first >> v[i].second;  // {T_i, P_i}
    }

    // DP 수행
    for (int i = 0; i < n; i++)
    {
        // i일까지의 최대 수익 유지
        if (i > 0) dp[i] = max(dp[i], dp[i - 1]);

        int index = i + v[i].first;  // 상담이 끝나는 날짜
        if (index <= n)  // 퇴사일을 넘지 않으면 상담 가능
        {
            dp[index] = max(dp[index], dp[i] + v[i].second);
        }
    }

    // 최댓값 출력
    cout << *max_element(dp.begin(), dp.end());
}

'C++' 카테고리의 다른 글

[C++] 텍스트 기반 RPG 게임 제작 프로젝트 회고록 (0) 2025.01.17
[OPEN GL] 프로젝트 시작 전 사용 설정 (0) 2021.12.05
[Open GL] v/vt/vn 형식 OBJ 읽어오기 (0) 2021.12.05
Laplace equation in c++ (0) 2021.10.08
Mesh smoothing with cotangent weight (1) 2021.10.08
  1. 문제: 퇴사 2 (백준 15486번)
  2. 해결 방법: 동적 계획법 (DP)
  3. 코드 설명
'C++' 카테고리의 다른 글
  • [C++] 텍스트 기반 RPG 게임 제작 프로젝트 회고록
  • [OPEN GL] 프로젝트 시작 전 사용 설정
  • [Open GL] v/vt/vn 형식 OBJ 읽어오기
  • Laplace equation in c++
돼지표
돼지표
https://github.com/wkdgns135
  • 돼지표
    돼지표 개발 스토리
    돼지표
  • 전체
    오늘
    어제
    • 분류 전체보기 (97)
      • C++ (58)
        • Algorithm (52)
      • Python (1)
      • Machine Learning (2)
      • Computer Graphics (4)
        • Curly Hair Simulation (2)
      • GPU Programming (11)
        • CUDA basic (7)
        • CUDA fluidsGL (4)
      • Unreal 5 (19)
        • Troubleshooting (4)
        • FPS Shooting (5)
        • Study (8)
        • EOS (1)
      • Computer Science (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    GPU Programming
    그래프 이론
    unreal 5
    위상 정렬
    FPS
    Rendering Pipeline
    C++
    그리디 알고리즘
    UE5
    Algorithm
    dp
    아이작 맵 생성
    자료 구조
    구현
    BFS
    CUDA
    수학
    OpenGL
    그래프 탐색
    Fluid Simulation
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
돼지표
[C++] 백준/Gold/15486. 퇴사 2
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.