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.InputStreamReader;
import java.util.*;
public class Main_BJ_9465_스티커 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int t = Integer.parseInt(br.readLine());
for(int tc=0; tc<t; tc++){
int n = Integer.parseInt(br.readLine());
int[][] sticker = new int[2][n];
int[][] dp = new int[2][n+1];
for(int i=0; i<2; i++){
st = new StringTokenizer(br.readLine());
for(int j=0; j<n; j++){
sticker[i][j] = Integer.parseInt(st.nextToken());
}
}
int max;
dp[0][1] = sticker[0][0];
dp[1][1] = sticker[1][0];
for(int i=2; i<=n; i++){
dp[0][i] = Math.max(dp[1][i - 1], dp[1][i - 2]) + sticker[0][i-1];
dp[1][i] = Math.max(dp[0][i - 1], dp[0][i - 2]) + sticker[1][i-1];
}
max = Math.max(dp[0][n], dp[1][n]);
System.out.println(max);
}//test case
}//main
}
처음에는 완탐인줄 알고 pq이용해서 풀다가 도저히 안 될것 같아서 찾아봤다.
dp더라;;ㅎㅎ
이 문제는 결국 대각선을 봐야한다.
0번째 행이면, 1번째 행의 i-1열과 i-2열까지의 dp중에서 가장 큰 값을,
1번째 행이면, 0번째 행의 i-1열과 i-2열까지의 dp중에서 가장 큰 값을 택해서 스티커의 현재 위치와 더해주면 된다.
따라서 점화식을 세우면, 아래와 같다.
dp[0][i] = Math.max(dp[1][i - 1], dp[1][i - 2]) + sticker[0][i-1];
dp[1][i] = Math.max(dp[0][i - 1], dp[0][i - 2]) + sticker[1][i-1];
dp문제 다른 것 풀어봐야지...
참고한 블로그
https://propercoding.tistory.com/14
[백준] 9465번 : 스티커 – JAVA [자바]
https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며,
propercoding.tistory.com
728x90
'코테 > 백준' 카테고리의 다른 글
백준 9012 괄호(JAVA) (1) | 2023.03.13 |
---|---|
백준 2775 부녀회장이 될테야(JAVA) (0) | 2023.03.12 |
백준 2751 수 정렬하기2(JAVA) (0) | 2023.03.11 |
백준 2407 조합(JAVA) (0) | 2023.03.09 |
백준 13549 숨바꼭질3(JAVA) (1) | 2023.03.08 |