본문 바로가기

브루트 포스/브루트포스(재귀)

퇴사

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

 

14501번: 퇴사

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

www.acmicpc.net

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
#include <iostream>
using namespace std;
 
int t[21];
int p[21];
int n;
int ans = 0;
void go(int day, int sum) {
    if (day == n + 1) {
        if (ans < sum) ans = sum;
        return;
    }
    if (day > n + 1) {
        return;
    }
    go(day + 1, sum);
    go(day + t[day], sum + p[day]);
}
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++
    {
        cin >> t[i] >> p[i];
    }
    go(10);
    cout << ans << '\n';
    return 0;
}
cs

DP 버전

뒤에서 부터 앞으로도 가능하다!!

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
#include <iostream>
#include <algorithm>
 
int t[20];
int p[20];
int d[20];
 
using namespace std;
 
int main()
{
    int n;
    cin >> n;
 
    for (int i = 1; i <= n; i++)
        cin >> t[i] >> p[i];
 
 
    // 역순으로 dp
    for (int i = n; i >= 1; i--)
    {
        if (i + t[i] <= n + 1)
        {
            d[i] = max(d[i + 1], d[i + t[i]] + p[i]);
        }
        else
            // 고르지 않은 것
            d[i] = d[i + 1];
    }
 
    cout << d[1<< '\n';
}
cs

'브루트 포스 > 브루트포스(재귀)' 카테고리의 다른 글

맞춰봐 (백트래킹)  (0) 2023.03.01
부등호 (백트래킹)  (0) 2023.02.28
스타트와 링크  (0) 2023.02.28
암호 만들기  (0) 2023.02.27
1, 2, 3 더하기  (0) 2023.02.27