https://www.acmicpc.net/problem/14501
14501번: 퇴사
첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.
www.acmicpc.net
[문제 풀이]
문제의 해결법은 DFS인 거 같다.
DP로 풀려고 하였지만 풀고 보니 메모제이션을 이용하지 않았기 때문에 DFS인 걸로 보인다.
점화식
solution(pos + 1), solution(pos + arr[0][pos]) + arr[1][pos] 을 이용하여 풀었다.
매 단계마다 i번째 날에 일할 것인지 안 할 것인지를 봐주면서 DFS로 파고드는 방법이다.
[코드]
#include<iostream>
#include<algorithm>
using namespace std;
#define INF -987654321;
int N;
int arr[2][15];
int dp[15] = { -1, };
int solution(int pos) {
if (pos == N)
return 0;
if (pos > N)
return INF;
return max(solution(pos + 1), solution(pos + arr[0][pos]) + arr[1][pos]);
}
int main() {
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d %d", &arr[0][i], &arr[1][i]);
}
printf("%d", solution(0));
return 0;
}
'algorithm > BOJ' 카테고리의 다른 글
백준 2748_피보나치 수 2(C++) (0) | 2020.04.03 |
---|---|
백준 7568_덩치(C++) (3) | 2020.04.03 |
백준 11729_하노이 탑 이동 순서(C++) (4) | 2020.04.01 |
백준 14888_연산자 끼워넣기(C++) (2) | 2020.03.28 |
백준 13458_시험감독(C++) (3) | 2020.03.27 |