Algorithm/BOJ

[c++][BOJ][1932] 정수 삼각형

kim-hasa 2022. 3. 3. 13:41

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

 

1932번: 정수 삼각형

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

www.acmicpc.net

맨 위에서부터 내려왔을 때 , 가장 큰 점수를 획득하는 경우를 구하는 문제입니다.

 

반대로 생각하면 , 아래에서 맨 위로 올라갔을 때 가장 큰 점수를 구하면 됩니다.

 

특정 점 [ i , j ] 의 최대값은 [ i + 1][ j ] , [ i + 1 ][ j + 1 ] 중에 큰 수를 구해서 정하고,

[ i , j ] 가 [ 1 , 1 ]이 될 때까지 올리면 됩니다. 

#include <iostream>
using namespace std;

int arr[501][501] = {0};

int main(){
    int n;
    cin >> n;
    
    for(int i=1; i<=n; i++){
        for(int j=1; j<=i; j++){
            cin >> arr[i][j];
        }
    }
    
    for(int i=n-1; i>0; i--){
        for(int j=1; j<n; j++){
            arr[i][j] = arr[i][j] + max(arr[i+1][j] , arr[i+1][j+1]);
        }
    }
    
    cout << arr[1][1];
}