Algorithm/백준

C++ 알고리즘 - 백준 11052 카드 구매하기

마루설아 2025. 2. 21. 11:39

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

 

#include <bits/stdc++.h>
#define endl "\n"

using namespace std;

/******** 전역변수 ********/
int card[1002];
int answer[1002];

/******** 함    수 ********/


int main(void) {
	/******** C++ INIT ********/
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	/******** 지역변수 ********/
	int input1;
	int input2;

	/******** 구    현 ********/
	cin >> input1;

	// 카드팩 가격 입력
	for (int i = 1; i <= input1; i++) {
		cin >> input2;
		card[i] = input2;
	}

	// 카드팩 1장만 구입할 때는 카드팩 1장의 가격 그대로
	answer[1] = card[1];

	// 구매하려는 카드팩 2장 이상일 때 동적 프로그래밍
	for (int i = 2; i <= input1; i++) {
		for (int j = 0; j <= i; j++) {
			// 구매하려는 카드팩이 i장일때 => i장짜리 한개만 살지
			// i-j장을 사고 나머지 j장을 살지 최대값 결정
			
			// 예시) 구매하려는 카드팩이 2장일때
				// 카드팩 2장 최대값 + 카드팩 0장
				// 카드팩 1장 최대값 + 카드팩 1장
				// 카드팩 0장 최대값 + 카드팩 2장
			answer[i] = max(answer[i], answer[i - j] + card[j]);
		}
	}

	cout << answer[input1];
}