습관처럼

백준 1932 - 정수 삼각형 본문

Algorithms/BOJ

백준 1932 - 정수 삼각형

dev.wookii 2020. 4. 8. 09:33

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

 

1932번: 정수 삼각형

문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다. 삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는

www.acmicpc.net

문제 설명


        7
      3   8
    8   1   0
  2   7   4   4
4   5   2   6   5

위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때,

이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라.

아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.

 

 

접근 방법


DP 로 접근하며, 각층에서 최대가 되는 숫자를 저장해 나간다. 이후 마지막 자식 트리에서 최대값을 찾으면 된다.

 

 

코드


#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n,count=0;
int tri[501][501];
int maxi[501][501];
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        for(int j=0;j<=i;j++){
            cin>>tri[i][j];
        }
    }
    maxi[0][0]=tri[0][0];
    for(int i=1;i<n;i++){
        for(int j=0;j<=i;j++){
            if(j==0) maxi[i][j]=maxi[i-1][j]+tri[i][j];
            else if(j==i) maxi[i][j]=maxi[i-1][j-1]+tri[i][j];
            else maxi[i][j]=max(maxi[i-1][j-1],maxi[i-1][j])+tri[i][j];
        }
    }
    sort(maxi[n-1],maxi[n-1]+n);
    cout<<maxi[n-1][n-1];
    return 0;
}

funny algorithm T.T;;;

'Algorithms > BOJ' 카테고리의 다른 글

백준 11053 - 가장 긴 증가하는 부분 수열  (0) 2020.04.08
백준 1912 - 연속합  (0) 2020.04.08
백준 1157 - 단어 공부  (0) 2020.04.08
백준 2908 - 상수  (0) 2020.04.08
백준 10809 - 알파벳 찾기  (0) 2020.04.08