티스토리 뷰

728x90

문제

https://www.acmicpc.net/problem/9465

 

9465번: 스티커

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의

www.acmicpc.net

 

풀이 및 소스코드

 

무조건 바로 직전 대각선 스티커를 선택한다고 최선이 아니다.

직전 대각선 스티커와 전전 대각선 스티커 중 최선의 선택을 해주면 된다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();
        int t = Integer.parseInt(br.readLine());
        for(int tt=0;tt<t;tt++) {
        	int n = Integer.parseInt(br.readLine());
        	int[][] info = new int[2][n+1];
        	int[][] dp = new int[2][n+1];
        	for(int i=0;i<2;i++) {
        		st = new StringTokenizer(br.readLine());
        		for(int j=1;j<=n;j++) {
        			info[i][j] = Integer.parseInt(st.nextToken());
        		}
        	}
        	for(int i=0;i<2;i++) {
        		dp[i][1] = info[i][1];
        	}
        	for(int i=2;i<=n;i++) {
        		dp[0][i] = Math.max(dp[1][i-1], dp[1][i-2])+info[0][i];
        		dp[1][i] = Math.max(dp[0][i-1], dp[0][i-2])+info[1][i];
        	}
        	sb.append(Math.max(dp[0][n], dp[1][n])).append("\n");
        }
        System.out.println(sb);
	}
}
반응형