반응형
DP를 사용하는 문제이다.
이 문제는 DP를 사용하는 문제인데 다음과 같은 점화식을 가진다.
dp[n]= max(dp[i] + cost[n-i], cost[n]) (1 <= i < n)
i가 1부터 n-1까지 변하기에 이 부분을 for 문으로 해결해 주었다. 위와 같은 점화식을 이용하면 n번째에서의 최대값을 구할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
package boj.base;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_bj_11052_카드구매하기 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int N=Integer.parseInt(br.readLine());
int[] dp=new int[N+1];
int[] cost=new int[N+1];
st=new StringTokenizer(br.readLine());
for(int i=1;i<=N;i++)
cost[i]=Integer.parseInt(st.nextToken());
dp[1]=cost[1];
for(int i=2;i<=N;i++) {
dp[i]=cost[i];
for(int j=1;j<=i-1;j++) {
dp[i]=Math.max(dp[i], dp[j]+cost[i-j]);
}
}
System.out.println(dp[N]);
}
}
|
반응형
'Algorithm' 카테고리의 다른 글
[BOJ] 10844. 쉬운 계단 수 (0) | 2020.07.05 |
---|---|
[BOJ] 1, 2, 3 더하기 5 (0) | 2020.07.05 |
[BOJ] 11727. 2xn 타일링2 (0) | 2020.07.03 |
[BOJ] 1463. 1로 만들기 (0) | 2020.07.03 |
[BOJ] 1747. 소수&팰린드롬 (0) | 2020.07.01 |