https://www.acmicpc.net/problem/14501
14501번: 퇴사
첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.
www.acmicpc.net
#include <iostream>
using namespace std;
int t[1000] = { 0, };
int p[1000] = { 0, };
int dp[1000] = { 0, };
int max(int x, int y)
{
return x > y ? x : y;
}
int main()
{
int N;
int next;
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> t[i] >> p[i];
}
for (int i = N; i > 0; i--) {
next = i + t[i];
if (next > N + 1) {
dp[i] = dp[i + 1];
}
else {
dp[i] = max(dp[i + 1], dp[next] + p[i]);
}
}
cout << dp[1] << endl;
return 0;
}
설계
참고문헌
https://songsunbi.tistory.com/80
백준 14501 퇴사
완전 탐색 또는 동적프로그래밍으로 풀 수 있는 문제입니다. 저는 동적프로그래밍을 이용해 풀었습니다. 첫째날->마지막날로 생각하는 것이 아니라 반대로 마지막날->첫째날로 생각하면 더 쉽
songsunbi.tistory.com
재귀함수 사용하여 해결한 방식 : https://luv-n-interest.tistory.com/924
사용 알고리즘
다이나믹 프로그래밍 : https://freedeveloper.tistory.com/382?category=888096 (완독하기!)
브루트포스 알고리즘 : https://hcr3066.tistory.com/26