문제
백준 1932번 The Triangle https://www.acmicpc.net/problem/1932
1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
코드
#include<iostream>
#include<algorithm>
using namespace std;
int triangle[501][501], dp[501][501];
int n;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cin >> triangle[i][j];
}
}
dp[1][1] = triangle[1][1];
int ans = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
dp[i][j] = max(dp[i - 1][j] + triangle[i][j], dp[i - 1][j - 1] + triangle[i][j]);
}
}
for (int j = 1; j <= n; j++)ans = max(ans, dp[n][j]);
cout << ans;
}
풀이방법
dp를 이용해서 모든 경로에 대해 최대값을 갱신한다. 마지막에 n번째 줄에서 최대값을 출력해준다
고민과정
삼각형이라 입력받을때 살짝 헷갈렸다
'algorithm > Dynamic Programming' 카테고리의 다른 글
[C++] BOJ 2579 계단 오르기 (0) | 2023.01.16 |
---|---|
[C++] BOJ 9095 1, 2, 3 더하기 (0) | 2021.08.07 |
[C++] BOJ 11048 이동하기 (0) | 2021.08.07 |
[C++] BOJ 1010 다리 놓기 (0) | 2021.05.01 |
[C++] BOJ 13301 타일 장식물 (0) | 2021.05.01 |