실버 1
https://www.acmicpc.net/problem/11052
(자세한 문제는 링크 클릭)
테이블 정의
D[i] = 카드가 i개일 때 지불해야하는 최대 금액
점화식 찾기
카드가 1개 들어있는 카드팩을 구매하고 카드 i-1개를 구입한다.
카드가 2개 들어있는 카드팩을 구매하고 카드 i-2개를 구입한다.
카드가 3개 들어있는 카드팩을 구매하고 카드 i-3개를 구입한다.
...
D[i] = P[n] + D[i-n]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 11052번 카드 구매하기
public class boj_5_11052 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] arr = new int[n + 1];
int[] dp = new int[n + 1];
for (int i = 1; i <= n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
dp[i] = Math.max(dp[i], arr[j] + dp[i - j]);
}
}
System.out.println(dp[n]);
}
}