반응형
문제 링크 : 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] 2167 2차원 배열의 합 (0) | 2016.09.11 |
[acmicpc.net] 2579 계단 오르기 (0) | 2016.09.09 |
[acmicpc.net] 2193 이친수 (0) | 2016.09.08 |