본문 바로가기

Algorithm/백준

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

https://www.acmicpc.net/problem/11052

 

11052번: 카드 구매하기

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

www.acmicpc.net

문제가 길지만 한마리로 얘기하면, 1~N장의 카드 셋과, 각각의 가격이 주어졌을 때 N장의 카드를 구입하기 위해 지불할 수 있는 최대 가격을 구하는 문제이다.

역시나 DP를 이용해서 풀 수 있다.

 

N장의 카드의 최대 가격은 dp[N-i] + price[i](i = 1 to N)의 최대값이다.

이 점을 이용해서 잘 구현하면 됨!

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
	int N;
	int price[1001];
	int dp[1001];

	cin >> N;
	for (int i = 1; i <= N; i++) cin >> price[i];

	fill(dp, dp + 1001, 0);

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= i; j++) {
			dp[i] = max(dp[i], dp[i - j] + price[j]);
		}
	}

	cout << dp[N];

	return 0;
}

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

[백준] 16500번: 문자열 판별  (0) 2020.03.03
[백준] 12865번: 평범한 배낭  (0) 2020.03.02
[백준] 11051번: 이항 계수 2  (0) 2020.03.02
[백준] 11570번: 오르막 수  (0) 2020.02.26
[백준] 1699번: 제곱수의 합  (0) 2020.02.17