Deff_Dev
[백준] 14501 퇴사 (C++) 본문
문제
https://www.acmicpc.net/problem/14501
풀이
이 문제는 다이나믹 프로그래밍 문제이다.
n부터 시작하여 각 상담에 대한 최댓값을 구하는 방법을 사용했다.
dp[i] = max (dp[i + 1], dp[ t[i] + i] + v[i]]
여기서 상담을 할 수 없는 날이라면, dp[i + 1] 값을 저장한다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int dp[17] = { 0, };
int main() {
int n;
cin >> n;
vector<int> t(n + 1);
vector<int> v(n + 1);
for (int i = 1; i <= n; i++) {
cin >> t[i] >> v[i];
}
for (int i = n; i >= 1; i--) {
int next = t[i] + i;
if (next <= n + 1) {
dp[i] = max(dp[i + 1], dp[next] + v[i]);
}
else {
dp[i] = dp[i + 1];
}
}
cout << dp[1];
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 1475번 방 번호 (C++) (0) | 2024.12.03 |
---|---|
[백준] 11726번 2 * n 타일링 (C++) (0) | 2024.10.27 |
[백준] 11053번 가장 긴 증가하는 부분 수열 (0) | 2024.10.27 |
[백준] 1463번 1로 만들기 (C++) (0) | 2024.10.27 |
[백준] 2579번 계단 오르기 (C++) (0) | 2024.10.27 |