본문 바로가기

Algorithm

C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 1932번:숫자삼각형 답

반응형

D[i][j] = i번째 행에서 j를 선택할 때 최대값 (1<=j< i)

그 전 행에서 왼쪽 수를 선택할 때를 j,오른쪽 수를 선택할 때를 j+1이므로 

D[i][j] = max(D[i-1][j-1] +a[i][j],D[i-1][j] +a[i][j])


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <algorithm>
using namespace std;
int a[501][501],D[501][501],n, ans;
int main() {
    cin >> n;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= i; j++)
            cin >> a[i][j];
    D[1][1= a[1][1];
    for (int i = 2; i <= n; i++)
        for (int j = 1; j <= i; j++)
        {
            D[i][j] = max(D[i - 1][j - 1+ a[i][j], D[i - 1][j] + a[i][j]);
        }
    for (int i = 2; i <= n; i++)
        for (int j = 1; j <= i; j++)
            if (D[i][j] > ans)
                ans = D[i][j];
    cout << ans << '\n';
}
cs