Be a developer

백준 14501 퇴사 본문

알고리즘

백준 14501 퇴사

중국고대사 2019. 4. 4. 01:45

앞선 문제들을 풀었다면 쉽게 풀 수 있는 문제이다.

마찬가지로 현재 날짜를 선택하는 경우와 선택하지 않는 경우로 나눠서 풀면된다.

N+1일을 넘어가지 않도록 하는 것이 중요하다.(딱 N+1일에 끝나도록 한다.)

 

답이 될 수 있는 경우에 return을 하는 것을 매번 까먹는다.

까먹지 않도록 주의

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
 
int n;
int ans;
 
void solve(int idx, int sum, vector<int> t, vector<int> p) {
    //N+1일을 넘어가면 안되므로 return
    if (idx > n)return;
    //N+1일이면 max값과 비교한다.
    if (idx == n) {
        ans = max(ans, sum);
        //return하는거 까먹지 말자 맨날 까먹는다..
        return;
    }
    //N+1일에 도달하지 않았으면 계속 진행
    //현재 날짜를 선택한다.
    solve(idx + t[idx], sum + p[idx], t, p);
    //현재 날짜를 선택하지 않으면 다음 날로 간다.
    solve(idx + 1, sum, t, p);
}
 
int main(int argc, char** argv) {
    cin >> n;
 
    vector<int> t(n);
    vector<int> p(n);
 
    for (int i = 0; i < n; i++) {
        cin >> t[i] >> p[i];
    }
 
    solve(00, t, p);
 
    printf("%d\n", ans);
 
    return 0;
}
cs

'알고리즘' 카테고리의 다른 글

백준 15658 연산자 끼워넣기 (2)  (0) 2019.04.04
백준 14888 연산자 끼워넣기 (재귀)  (0) 2019.04.04
백준 1182 부분수열의 합  (0) 2019.04.03
백준 6603 로또 (재귀)  (0) 2019.04.03
백준 1759 암호 만들기  (0) 2019.04.02
Comments