문제

https://www.acmicpc.net/problem/14501

 

14501번: 퇴사

첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.

www.acmicpc.net

 

 

주안점

최대 이익 찾기 => 부르트 포스, 그리디, 동적 프로그래밍

부르트 포스로 찾을 수도 있으나 효율을 위해서 동적 프로그래밍이 적당하다.

 

 

구조

dp함수 : parameter로 넘어온 index에서 얻을 수 있는 최대 금액이 리턴된다.

 

 

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

int n,t,p;
vector<int> day,pay;
int a[19][19];

int dp(int idx){
	if(idx >= n) return 0;
	int &ret = *a[idx];
	if(ret != -1) return ret;

    ret = 0;
    if(idx+day[idx] > n) {
        ret = max(ret, dp(idx+1));
    } else {
        ret = max(dp(idx+1), dp(idx+day[idx])+pay[idx]);
    }

	return ret;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

	cin>>n;
	for(int i=0; i<n; i++){
		cin>>t>>p;
		day.push_back(t);
		pay.push_back(p);
	}
	memset(a, -1, sizeof(a));
	cout<<dp(0)<<"\n";
}

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 14716번 : 현수막  (0) 2021.12.15
[백준] 2292번 : 벌집  (0) 2021.12.01
[백준] 2636번 : 치즈  (0) 2021.11.09
[백준] 회의실 배정  (0) 2021.11.04
[백준] 부녀회장이 될테야  (0) 2021.11.03

+ Recent posts