1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
간단한 DP 문제였다.
삼각형이
n = 5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
이런 식으로 주어진다면 가장 밑 줄에서 가장 큰 수를 얻으려면
0번째 줄에서 그다음 줄로 현재 값에서 왼쪽으로 내려가던가, 오른쪽으로 내려가던가 이 두 가지 경우의 수만
따져주면 된다.
max(solve(x + 1, y + 1), solve(x + 1, y)) + ar[x][y]
table[x][y] 의 값은 결국 위의 식처럼 될 것이다.
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int ar[501][501], d[501][501], n;
int solve(int x, int y) {
if (x == n - 1) return ar[x][y];
if (d[x][y] != -1) return d[x][y];
return d[x][y] = max(solve(x + 1, y + 1), solve(x + 1, y)) + ar[x][y];
}
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n;
memset(d, -1, sizeof(d));
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
cin >> ar[i][j];
}
}
cout << solve(0, 0) << endl;
return 0;
}
삼각형이 0이 될 수 있으므로 -1로 초기화해줘야 안전할 것 같아서 memset으로 초기화해줬다.
'BOJ' 카테고리의 다른 글
BOJ 20055 컨베이어 벨트 위의 로봇 (0) | 2020.11.02 |
---|---|
BOJ 2293 동전 1, 2294 동전 2 (0) | 2020.10.23 |
BOJ 4195 친구 네트워크 (0) | 2020.10.17 |
BOJ 1976 여행 가자 (0) | 2020.10.15 |
BOJ 2470 두 용액 (0) | 2020.10.11 |