https://www.acmicpc.net/problem/2240
2240번: 자두나무
자두는 자두를 좋아한다. 그래서 집에 자두나무를 심어두고, 여기서 열리는 자두를 먹고는 한다. 하지만 자두는 키가 작아서 자두를 따먹지는 못하고, 자두가 떨어질 때까지 기다린 다음에 떨어
www.acmicpc.net
문제
코드
import java.io.*;
import java.util.*;
public class Main {
private static final BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(bf.readLine());
int t = Integer.parseInt(st.nextToken());
int w = Integer.parseInt(st.nextToken());
int[][] dp = new int[t+1][w+1];
for(int i = 1 ; i <= t ; i++) {
int p = Integer.parseInt(bf.readLine());
for(int j = 0 ; j <= w ; j++) {
if(j == 0) {
if(p == 1) {
dp[i][j] = dp[i-1][j] + 1;
} else {
dp[i][j] = dp[i-1][j];
}
continue;
}
if(j % 2 == 0) {
if(p == 1) {
dp[i][j] = Math.max(dp[i-1][j-1], dp[i-1][j] + 1);
} else {
dp[i][j] = Math.max(dp[i-1][j-1] + 1, dp[i-1][j]);
}
} else {
if(p == 1) {
dp[i][j] = Math.max(dp[i-1][j-1] + 1, dp[i-1][j]);
} else {
dp[i][j] = Math.max(dp[i-1][j-1], dp[i-1][j] + 1);
}
}
}
}
int ans = 0;
for(int i = 0 ; i <= w ; i++) {
ans = Math.max(ans, dp[t][i]);
}
bw.write(Integer.toString(ans));
bf.close();
bw.flush();
bw.close();
}
}
위 코드의 다이나믹 프로그래밍 수행결과는 표와 같습니다.
Search
'코딩테스트' 카테고리의 다른 글
[백준] 1027번 '고층 건물' - Java (1) | 2023.07.26 |
---|---|
[백준] 1484번 '다이어트' - Java (0) | 2023.07.25 |
[백준] 1309번 '동물원' - Java (0) | 2023.07.23 |
[백준] 1261번 '알고스팟' - Java (0) | 2023.07.22 |
[백준] 5107번 '마니또' - Java (1) | 2023.07.20 |