boj)11052 - 카드 구매하기

2020. 9. 17. 12:35PS/boj

import java.io.*;

// # 카드 구매하기
public class boj_11052 {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    public static void main(String[] args) throws Exception {

        int n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        int[] p = new int[n+1];
        int[] dp = new int[n+1];
        for (int i = 1; i <= n; i++) {
            p[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], dp[i-j] + p[j]);
            }
        }

        System.out.println(dp[n]);
    }
}

 

- 카드 N 개를 구매하기 위해서 카드팩 여러개를 살텐데 그 중에 마지막 카드팩에 카드가 몇장 있을까 ?

- 알수없다 -> dp문제의 중요한 힌트, 1 ~ N 개가 들어있을 것이다.

- 점화식을 세워보자면 dp[n] = dp[n-i] + p[i] 이다.

- 1 ~ N 까지 반복해서 그 중에 최대값이 dp의 값이다.

- bottom-up 방식으로 dp 테이블을 채우고 출력.

 

'PS > boj' 카테고리의 다른 글

boj)15590 - 1, 2, 3 더하기 5  (0) 2020.09.17
boj)16194 - 카드 구매하기 2  (0) 2020.09.17
boj)9095 - 1, 2, 3 더하기  (0) 2020.09.16
boj)11727 - 2xn 타일링 2  (0) 2020.09.16
boj)11726 - 2xn 타일링  (0) 2020.09.16