본문 바로가기

algorithm/Dynamic Programming

[C++] BOJ 1932 삼각형

문제

백준 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