문제
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
위 그림은 크기가 5인 정수 삼각형의 한 모습이다.
맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.
삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는 모두 정수이며, 범위는 0 이상 9999 이하이다.
입력
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
출력
첫째 줄에 합이 최대가 되는 경로에 있는 수의 합을 출력한다.
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include <numeric>
#include<math.h>
using namespace std;
int main() {
int n, arr[502][502] = { 0, }, j, max_num = 0;
cin >> n;
scanf("%d", &arr[1][1]);
for (int i = 2; i < n + 1; i++) {
for (j = 1; j < i+1; j++) {
scanf("%d", &arr[i][j]);
arr[i][j] += max(arr[i - 1][j - 1], arr[i - 1][j]);
}
}
for (int i = 1; i < n + 1; i++) {
if (max_num < arr[n][i])
max_num = arr[n][i];
}
cout << max_num;
}
대각선의 값중 큰값을 계속 더해가서 그중 최대값을 출력하는 방식이다.
'알고리즘!' 카테고리의 다른 글
백준 9012번- 괄호 (0) | 2019.10.23 |
---|---|
백준 10773번-제로 (0) | 2019.10.21 |
백준 1149번- RGB거리 (0) | 2019.09.20 |
백준 9461번- 파도반 수열 (0) | 2019.09.18 |
백준 1904번-01타일 (0) | 2019.09.17 |