※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 1932번 문제인 정수 삼각형이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/1932
1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
대표적인 기본 DP 문제 중 하나이다.
삼각형의 각 숫자까지의 경로 중 수의 합이 가장 큰 경로는 그 수로 올 수 있는 이전 행의 숫자까지의 숫자의 합이 최대인 경로의 끝에 그 숫자를 붙이는 것으로 구할 수 있다. 이는 DP를 이용하여 쉽게 계산할 수 있다.
아래의 구현이 가능한 이유는 모든 숫자가 음이 아닌 정수이기 때문이다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int arr[501][501];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N; cin >> N;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= i; j++) {
int x; cin >> x;
arr[i][j] = max(arr[i - 1][j - 1], arr[i - 1][j]) + x;
}
}
int ans = 0;
for (int j = 1; j <= N; j++) {
ans = max(ans, arr[N][j]);
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 17080 // C++] 결함 게임 (0) | 2021.08.25 |
---|---|
[BOJ 2655 // C++] 가장높은탑쌓기 (0) | 2021.08.24 |
[BOJ 2631 // C++] 줄세우기 (0) | 2021.08.22 |
[BOJ 1695 // C++] 팰린드롬 만들기 (0) | 2021.08.21 |
[BOJ 2482 // C++] 색상환 (0) | 2021.08.20 |