알고리즘/ALGOSPOT
[ALGOSPOT] 알고스팟: 삼각형 위의 최대 경로
벨에삐
2023. 2. 20. 21:43
https://www.algospot.com/judge/problem/read/TRIANGLEPATH
algospot.com :: TRIANGLEPATH
삼각형 위의 최대 경로 문제 정보 문제 6 1 2 3 7 4 9 4 1 7 2 7 5 9 4 위 형태와 같이 삼각형 모양으로 배치된 자연수들이 있습니다. 맨 위의 숫자에서 시작해, 한 번에 한 칸씩 아래로 내려가 맨 아래
www.algospot.com
#include <bits/stdc++.h>
using namespace std;
int C, n, tri[101][101], dp[101][101];
int solve(){
// dp[i][j] : (i,j)까지의 최대합
// dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]) + tri[i][j];
for(int i = 1; i <= n; i++){
for(int j = 1; j <= i; j++){
dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]) + tri[i][j];
}
}
return *max_element(dp[n] + 1, dp[n] + n + 1);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> C;
while(C--){
memset(dp, 0, sizeof(dp));
cin >> n;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= i; j++){
cin >> tri[i][j];
}
}
cout << solve() << '\n';
}
}
[BOJ] 1932번: 정수삼각형 문항과 유사한 문항입니다.
소스 코드의 주석과 같이 dp table을 정의하면 점화식을 쉽게 세울 수 있습니다.
1-based index를 선호하는데, 자교 문병로 교수님의 알고리즘 강의를 듣고 영향을 받았습니다. i = 0 or j = 0 부분이 경계치 역할을 하여 따로 추가해야할 초기값 설정을 굳이 해주지 않아도 된다는 장점이 있습니다.