알고리즘/백준
백준 14501번 퇴사 C/C++ 풀이
Chavo Kim
2020. 8. 13. 17:21
https://www.acmicpc.net/problem/14501
14501번: 퇴사
첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.
www.acmicpc.net
동적계획법으로 풀었다.
배낭 알고리즘을 응용해서 풀었다.
#include <stdio.h>
#include <algorithm>
using namespace std;
FILE* in = fopen("input.txt", "r");
#define MAX 15
int n;
int time[MAX];
int pay[MAX];
int cache[MAX+1][MAX * 1000];
int dp(int idx, int cost) {
//메모이제이션
if (cache[idx][cost] != 0)
return cache[idx][cost];
if (idx == n)
return cost;
if (idx + time[idx] <= n)
return cache[idx][cost] = max(dp(idx + time[idx], cost + pay[idx]), dp(idx + 1, cost));
else
return cache[idx][cost] = dp(idx + 1, cost);
}
int main() {
fscanf(in, "%d", &n);
for (int i = 0; i < n; i++)
fscanf(in, "%d %d", &time[i], &pay[i]);
printf("%d", dp(0, 0));
return 0;
}