취미처럼

[백준] 11052번 카드 구매하기 본문

Algorithm/백준

[백준] 11052번 카드 구매하기

sirius 2021. 3. 5. 09:35
https://www.acmicpc.net/problem/11052
 

11052번: 카드 구매하기

첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)

www.acmicpc.net

 

1. 테이블 정의

dp[i] = 카드가 i개일 때 최대 금액

 

2. 점화식

카드팩 1개 구매 : i - 1 개 추가 구매 가능

카드팩 2개 구매 : i - 2 개 추가 구매 가능

카드팩 3개 구매 : i - 3 개 추가 구매 가능

 

dp[i] = 현재금액[n] + dp[i-n]

 

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        int[] arr = new int[N + 1];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i = 1; i <= N; i++) {
        	arr[i] = Integer.parseInt(st.nextToken());
        }

        int[] dp = new int[N + 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]);
    }
}

'Algorithm > 백준' 카테고리의 다른 글

[백준] 15990번 1, 2, 3 더하기 5  (0) 2021.03.05
[백준] 16194번 카드 구매하기 2  (0) 2021.03.05
[백준] 11727번 2Xn 타일링 2  (0) 2021.03.05
[백준] 11726번 2Xn 타일링  (0) 2021.03.05
[백준] 1463번 1로 만들기  (0) 2021.03.05
Comments