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

백준 1633

by 신재권 2022. 1. 25.
import java.util.Scanner;

public class Main1633 {

	public static void main(String[] args)  {
		
		//1. 백을 선택
		//2. 흑을 선택
		//3. 둘다 선택하지 않음 
		
		int[][] P = new int[1001][2];
		int[][][] D = new int[1001][16][16];
		//D[i][j][k] = max(D[i-1][j-1][k] + P[i][0], D[i-1][j][k-1]+P[i][1], D[i-1][i][j])
		
		int max_idx =  15;
		
		int cnt = 0;

		Scanner sc = new Scanner(System.in);
		while(sc.hasNextInt()) {
			P[cnt][0] = sc.nextInt(); // 백
			P[cnt++][1] = sc.nextInt(); // 흑 
		}
		
		D[0][1][0] = P[0][0]; //첫번째 플레이어 백 
		D[0][0][1] = P[0][1]; //첫번째 플레이어 흑 
		
		int max = -1;
		for(int i=1; i<cnt; i++) {
			for(int j=0; j<=max_idx; j++) {
				for(int k=0; k<=max_idx; k++) {
					int tmp1 =0, tmp2 =0;
					if(j>0) { // i-1번째 참가자까지의 백 플레이어의 최대합 + 현재 백 플레이어값
						tmp1 = D[i-1][j-1][k] + P[i][0];
					}
					if(k>0) {// i-1번째 참가자까지의  흑 플레이어의 최대합 + 현재 흑 플레이어값
						tmp2 = D[i-1][j][k-1] + P[i][1];
					}
					D[i][j][k] = Math.max(D[i-1][j][k], Math.max(tmp1, tmp2));//가장큰값을 넣어줌 
					if(j==max_idx && k ==max_idx) {
						max = Math.max(max, D[i][j][k]);
					}
				}
			}
		}
		System.out.println(max);


	}
	
	
	
}

 

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

백준 2309_1  (0) 2022.01.27
백준 15991  (0) 2022.01.26
백준 14651  (0) 2022.01.24
백준 16500  (0) 2022.01.23
백준 1106  (0) 2022.01.22