https://www.acmicpc.net/problem/1932
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
41
42
43
44
45
46
47
48
49
|
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX = 500;
int tri[MAX + 1][MAX + 1];
int D[MAX + 1][MAX + 1];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// 입력
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
cin >> tri[i][j];
}
}
/*
점화식 :
D[i][j] = tri[i][j]로 올 수 있는 경로의 i - 1번째 최대값
+ tri[i][j]
*/
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
D[i][j] = max(D[i - 1][j - 1], D[i - 1][j]) + tri[i][j];
}
}
// 최대값 출력
int max = D[n][1];
for (int i = 2; i <= n; i++)
{
max = (max < D[n][i]) ? D[n][i] : max;
}
cout << max;
return 0;
}
Colored by Color Scripter
|
모든 경로 중에서 최대값을 구하는 문제.
DP문제인걸 까먹고 그냥 첫번째 수부터 선택해서 내려왔다가 한참 헤맸다..
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ]11722번: 가장 긴 감소하는 부분 수열(c++) (0) | 2020.04.23 |
---|---|
[BOJ]11055번: 가장 큰 증가 부분 수열(c++) (0) | 2020.04.23 |
[BOJ]2156번: 포도주 시식(c++) (0) | 2020.04.23 |
[BOJ]9465번: 스티커(c++) (0) | 2020.04.23 |
[BOJ]11057번: 오르막 수(c++) (0) | 2020.04.22 |
댓글