본문 바로가기
알고리즘 & 자료구조/백준

백준 1932

by 신재권 2021. 9. 8.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;


public class Main1932 {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		int[][] D = new int[N+1][N+1];
		int[][] A = new int[N+1][N+1];
		
		for(int i=1; i<=N; i++){
			StringTokenizer st = new StringTokenizer(br.readLine());
			int n = 1;
			while(st.hasMoreTokens()){
				A[i][n] = Integer.parseInt(st.nextToken());
				n++;
			}
		}
		
		//점화식 
		//D[i][j] = i행의 j번째가 선택되었을 때 최대 합
		//i,j 가 선택되었을 때 그전에 올 수 있는 경우의 수는 2가지이다.
		//D[i-1][j-1] , D[i-1][j] 이다.
		//이제 i,j까지 선택되었 을 때
		//D[i-1][j-1] + A[i][j], D[i-1][j] +A[i][j] 의 최대수를 구해주면 된다.
		//D[i][j] = max(D[i-1][j], D[i-1][j-1]) + A[i][j];
		
		for(int i=1; i<=N; i++){
			for(int j=1; j<=i; j++){
				D[i][j] = Math.max(D[i-1][j], D[i-1][j-1])+A[i][j];
			}
		}
			
		int ans = 0;
		for(int i=1; i<=N; i++){
			for(int j=1; j<=i; j++){
				if(ans < D[i][j]){
					ans = D[i][j];
				}
			}
		}
		System.out.println(ans);
		
		
	}
	
}

'알고리즘 & 자료구조 > 백준' 카테고리의 다른 글

백준 13398  (0) 2021.09.09
백준 11055  (0) 2021.09.09
백준 2156  (0) 2021.09.08
백준 9465  (0) 2021.09.08
백준 11057  (0) 2021.09.08