728x90
https://www.acmicpc.net/problem/11052
풀이과정
dp[n] : n개의 카드를 구매하는 가격의 최대값
arr[n] : n개의 카드가 들어있는 카드팩의 가격
[예시]
dp[1] = arr[1]
dp[2] = dp[1] + arr[1]
dp[2] = arr[2]
dp[3] = dp[2] + arr[1]
dp[3] = dp[1] + arr[2]
dp[3] = arr[3]
...
이런식으로 가능한 경우의 수가 나오는데, 우리는 최댓값을 구해야하므로 위의 과정 중 최댓값을 dp 배열에 계속 저장해주면 된다!
점화식은? 일반항 구하기!
[자바코드]
import java.util.Scanner;
public class boj11052 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n+1];
int[] dp = new int[n+1];
for(int i=1;i<=n;i++) {
arr[i] = scanner.nextInt();
}
dp[0] = 0;
dp[1] = arr[1];
for(int i=1;i<=n;i++) {
for(int j=1;j<=i;j++) {
dp[i] = Math.max(dp[i], dp[i-j] + arr[j]);
}
}
System.out.println(dp[n]);
}
}
728x90
'코딩테스트 > BOJ' 카테고리의 다른 글
[백준] 2206번 - 벽 부수고 이동하기 (0) | 2022.11.21 |
---|---|
[백준] 2225번 - 합분해 (0) | 2022.11.03 |
[백준] 2156번 - 포도주 시식 (1) | 2022.10.13 |
[백준] 9465번 - 스티커 (1) | 2022.10.13 |
[백준] 10825번 - 국영수 (0) | 2022.09.29 |
댓글