https://www.acmicpc.net/problem/1932
코드 :
dp - top down
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[][] seq;
static Integer[][] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
seq = new int[n+1][n+1];
dp = new Integer[n+1][n+1];
//초기화
for (int i = 1; i <= n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 1; j <= i; j++) {
seq[i][j] = Integer.parseInt(st.nextToken());
}
}
dp[1][1] = seq[1][1];
int max = 0;
for (int i = 1; i <= n; i++) {
max = Math.max(recur(n, i), max);
}
System.out.print(max);
}
//dp[n1][n2] n1번째 행, n2번째 열의 수까지의 최댓값
public static int recur(int row, int column){
if(dp[row][column] == null){
//왼쪽 맨끝인 경우
if(column == 1){
dp[row][column] = (recur(row - 1, 1)) + seq[row][column];
//오른쪽 맨 끝인 경우
} else if(column == row){
dp[row][column] = (recur(row - 1, column - 1)) + seq[row][column] ;
//끝이 아닌 경우들
} else {
dp[row][column] = Math.max(recur(row - 1, column), recur(row - 1, column - 1)) + seq[row][column];
}
}
return dp[row][column];
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 11722번 - 가장 긴 감소하는 부분 수열 (Java) (0) | 2022.04.04 |
---|---|
백준 11055번 - 가장 큰 증가 부분 수열 (Java) (0) | 2022.04.03 |
백준 9456번 - 스티커(Java) (0) | 2022.03.31 |
백준 11057번 - 오르막 수 (Java) (0) | 2022.03.30 |
백준 1309번 - 동물원 (Java) (0) | 2022.03.29 |
댓글