다이나믹프로그래밍(DP)

백준 1932번: 정수 삼각형

cepiloth 2020. 11. 26. 18:30
반응형

 

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

 

백준 1932번 정수 삼각형.pptx
0.05MB

키워드 - 다이나믹프로그래밍, 구현

 

#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>
#include <functional>
#include <vector>
#include <list>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <stack>
#include <math.h>
#include <memory.h>
using namespace std;

#define MAX_SIZE 100
#define INF 0x7fffffff
#define CENDL "\n"
#define ll long long

#define c_reverse(s) reverse(s.begin(), s.end())
#define c_sort(s) sort(s.begin(), s.end())
#define print_vector(v) for(int i=0; i<v.size(); i++) cout << v[i];

int dp[501][501];
int main() {

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

    int n; cin >> n;

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            cin >> dp[i][j];
        }
    }

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            if (j == 1) {
                // 첫번째 인덱스 일때는 참조할 값이 윗 인덱스 최 좌측 값
                dp[i][j] += dp[i - 1][j];
            }
            else if(j==n){
                // 인덱스가 n 일 경우 참조할 값이 윗 인덱스 최 우측 값
                dp[i][j] += dp[i - 1][j-1];
            }
            else {
                // 상위 인덱스에서 가장 큰 값을 참조
                dp[i][j] += max(dp[i - 1][j], dp[i - 1][j - 1]);
            }
        }
    }

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

    cout << sol << CENDL;
    return 0;
}

 

 

반응형