Algorithm/Dynamic Programming

[DP] 정수 삼각형

Maison 2025. 3. 2. 12:48

 

문제

 

 

접근법

 

* 도형 형식으로 경로가 존재하고, 이동시 거쳐간 최댓값을 구하는 문제 = DP 유형

 

1) 가장 작은 문제의 정의를 점화식으로 구현한다.

 

 

코드

 

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<vector<int>> triangle)
{
    vector<vector<int>> C=triangle;

    int y_max= triangle.size();

    for(int y=1;y<y_max;y++)
    {
        for(int x=0;x<=y;x++)
        {
            if(x==0) C[y][x] = C[y-1][x] + triangle[y][x];
            else if(x==y) C[y][x] = C[y-1][x-1] + triangle[y][x];
            else C[y][x] = max(C[y-1][x-1],C[y-1][x]) + triangle[y][x];
        }
    }

    int max = *max_element(C[y_max-1].begin(),C[y_max-1].end());

    return max;
}