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(1, 0);
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 |