[백준 1932번 C/C++] 정수 삼각형
목차
[백준 1932번 C/C++] 정수 삼각형
해결방안
Dynamic Programming(DP)
코드
#include<stdio.h>
#include<algorithm>
using namespace std;
int tri[501][501], sum[501][501];
int main() {
int n, maxValue=0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
scanf("%d", &tri[i][j]);
}
}
sum[0][0] = tri[0][0];
for (int i = 1; i < n; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0) {
sum[i][j] = sum[i-1][j] + tri[i][j];
}
else if (j == i) {
sum[i][j] = sum[i-1][j-1] + tri[i][j];
}
else {
sum[i][j] = max(sum[i-1][j-1], sum[i-1][j]) + tri[i][j];
}
}
}
for (int i = 0; i < n; i++) {
maxValue = max(maxValue, sum[n - 1][i]);
}
printf("%d", maxValue);
return 0;
}
#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int tri[501][501], cache[501][501], nextLoc[501][501];
int path(int y, int x)
{
if (y == n) return 0;
int& ret = cache[y][x];
if (ret != -1) return ret;
// 경로 기록
{
int nextBottomLeft = path(y + 1, x);
int nextBottomRight = path(y + 1, x + 1);
if (nextBottomLeft > nextBottomRight) nextLoc[y][x] = x;
else nextLoc[y][x] = x + 1;
}
return ret = tri[y][x] + max(path(y + 1, x), path(y + 1, x + 1));
}
int main() {
scanf("%d", &n);
memset(cache, -1, sizeof(cache));
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
scanf("%d", &tri[i][j]);
}
}
int ret = path(0, 0);
printf("%d", ret);
return 0;
}
'⭐ 코딩테스트 > 백준' 카테고리의 다른 글
[백준 1920번 C/C++] 수 찾기 (0) | 2023.06.08 |
---|---|
[백준 7785번 C/C++] 회사에 있는 사람 (0) | 2023.06.07 |
[백준 25192번 C/C++] 인사성 밝은 곰곰이 (0) | 2023.06.04 |
[백준 1197번 C/C++] 최소 스패닝 트리 (0) | 2023.05.31 |
[백준 11659번 C/C++] 구간 합 구하기 4 (0) | 2023.05.30 |
댓글
이 글 공유하기
다른 글
-
[백준 1920번 C/C++] 수 찾기
[백준 1920번 C/C++] 수 찾기
2023.06.08 -
[백준 7785번 C/C++] 회사에 있는 사람
[백준 7785번 C/C++] 회사에 있는 사람
2023.06.07 -
[백준 25192번 C/C++] 인사성 밝은 곰곰이
[백준 25192번 C/C++] 인사성 밝은 곰곰이
2023.06.04 -
[백준 1197번 C/C++] 최소 스패닝 트리
[백준 1197번 C/C++] 최소 스패닝 트리
2023.05.31