출처 : www.acmicpc.net/problem/1932
1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
고려사항
- 구하고자 하는 곳의 좌표를 y, x라 할때 y, x에 도달할 수 있는 이전 좌표는 y-1, x 와 y-1, x-1 좌표!
- x == 1 || x == y 인 경우에는 오직 한 좌표에서만 도달할 수 있음!
- 그 중 최대값 + 현재 자신의 비용 메모
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int num[501][501];
int memo[501][501];
int dp(int y, int x){
int &v = memo[y][x];
if(y == 1){
v = num[y][x];
return v;
}
if(v != -1){
return v;
}
if(x == 1){
v = dp(y-1, x) + num[y][x];
}else if(x == y){
v = dp(y-1, x-1) + num[y][x];
}else{
v = max(dp(y-1, x), dp(y-1, x-1)) + num[y][x];
}
return v;
}
int main() {
int n, ans = -1;
cin>>n;
for(int i=1;i<=n;++i){
for(int j=1;j<=i;++j){
cin>>num[i][j];
}
}
memset(memo, -1, 501*501*4);
for(int i=1;i<=n;++i){
ans = max(ans, dp(n, i));
}
cout<<ans;
return 0;
}
'BOJ 백준 > Dynamic Programming' 카테고리의 다른 글
백준 11053 - 가장 긴 증가하는 부분 수열 (0) | 2020.10.23 |
---|---|
백준 09251 - LCS (0) | 2020.10.23 |
백준 01912 - 연속합 (0) | 2020.10.23 |
백준 02579 - 계단 오르기 (0) | 2020.10.23 |
백준 01149 - RGB거리 (0) | 2020.10.23 |