본문 바로가기

컴퓨터/Online Judge

[acmicpc.net] 1932 숫자삼각형

문제 링크 : https://www.acmicpc.net/problem/1932


문제 내용

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

위 그림은 크기가 5인 숫자 삼각형의 한 모습이다.

맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.

삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 숫자는 모두 정수이며, 범위는 0 이상 99 이하이다.


소스코드


#include <iostream>
using namespace std;
 
int main() {
    int n, *arr, *results, size;
    cin >> n;
    size = n*(n+1)/2;
    arr = new int[size];
    results = new int[n];
    for(int i=0; i<size; i++)
        cin >> arr[i];
    for(int i=0; i<n; i++)
        results[i] = arr[i+n*(n-1)/2];
     
    for(int h=n-1; h > 0; h--){// node height.(root node height=1)
        int start = h*(h-1)/2;
        for(int i=0; i<h; i++){
            results[i] = arr[start+i] + max(results[i], results[i+1]);
        }
    }
    cout << results[0];
    return 0;
}



'컴퓨터 > Online Judge' 카테고리의 다른 글

[acmicpc.net] 11726 2×n 타일링  (0) 2016.09.21
[acmicpc.net] 2293 동전 1  (0) 2016.09.20
[acmicpc.net] 1932 숫자삼각형  (0) 2016.09.18
[acmicpc.net] 2167 2차원 배열의 합  (0) 2016.09.11
[acmicpc.net] 2579 계단 오르기  (0) 2016.09.09
[acmicpc.net] 2193 이친수  (0) 2016.09.08