Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
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
Archives
Today
Total
관리 메뉴

MG

[백준 / C++] 1932 - 정수 삼각형 본문

컴퓨터과학/알고리즘_PS

[백준 / C++] 1932 - 정수 삼각형

MG# 2022. 6. 1. 13:31

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

 

1932번: 정수 삼각형

첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.

www.acmicpc.net

한 숫자를 정했을 때 그 위의 두 경로 중 가장 최대값을 정하는 문제이다. 양 끝에 위치하는 숫자일 경우 바로 위 하나의 경로만 더하고 나머지 경우는 dp로 저장한 두 최대 경로 중 더 큰 값을 저장한다.

#include <iostream>
#include <vector>
#define MAX 501
using namespace std;

vector<int> v[MAX];
int dp[MAX][MAX];
int n, tmp, ans;

int main() {

    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            cin >> tmp;
            v[i].push_back(tmp);
        }
    }

    dp[0][0] = v[0][0];
    for (int i = 1; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            if (j == 0)
                dp[i][j] = dp[i - 1][j] + v[i][j];
            else if (j == i)
                dp[i][j] = dp[i - 1][j - 1] + v[i][j];
            else {
                dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j]) + v[i][j];
            }
        }
    }

    ans = 0;
    for (int i = 0; i < n; i++)
        ans = max(ans, dp[n - 1][i]);

    cout << ans << "\n";
    return 0;
}
#include <iostream>
#include <vector>
#define MAX 501
using namespace std;

vector<int> v[MAX];
int dp[MAX][MAX];
int n, tmp, ans;

int main() {

    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            cin >> tmp;
            v[i].push_back(tmp);
        }
    }

    dp[0][0] = v[0][0];
    for (int i = 1; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            if (j == 0)
                dp[i][j] = dp[i - 1][j] + v[i][j];
            else if (j == i)
                dp[i][j] = dp[i - 1][j - 1] + v[i][j];
            else {
                dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j]) + v[i][j];
            }
        }
    }

    ans = 0;
    for (int i = 0; i < n; i++)
        ans = max(ans, dp[n - 1][i]);

    cout << ans << "\n";
    return 0;
}

'컴퓨터과학 > 알고리즘_PS' 카테고리의 다른 글

[백준 / C++] 1238 - 파티  (0) 2022.06.01
[백준 / C++] 1149 - RGB거리  (0) 2022.05.29
[백준 / C++] 5557 - 1학년  (0) 2022.05.17
[백준] 1043 - 거짓말  (0) 2022.05.16
[백준] 2293 - 동전 1  (0) 2022.05.10