알고리즘 풀이

11052. 카드 구매하기

남생이야 2024. 1. 19. 18:37

 

 

 

DP 로 풀어야한다. 

카드를 고를 때 N= 4라면 

3장을 살 때의 최댓값은 +1장의 카드 

2장을 살 때의 최댓값은 +2장의 카드

1장을 살 때의 최댓값은 +3장의 카드

0장을 살 때의 최대값은 +4장의 카드 

 

이므로 위 중에서 가장 높은 값을 찾아내야 했다. 

 

고로 N장을 살때엔 

N-1장을 살 때 최댓값은 +1장의 카드를 고르게 되는 점화식을 추려낼 수 있어야 한다.. 

 

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <cmath>
using namespace std;

#define MAX 1001

int requireCount;
int fdp[MAX];
int dp[MAX];

void calc()
{
	for (int i = 1; i <= requireCount; i++)
	{
		
		for(int j = 1; j<= i;j++)
		{
			if (dp[i] < dp[i - j] + fdp[j])
			{
				dp[i] = dp[i - j] + fdp[j];
			}
			else
			{
				dp[i] = dp[i];
			}
		}
	}
}

int main() {

	cin >> requireCount;

	for (int i = 1; i <= requireCount; i++)
	{
		int num; 
		cin >> num; 
		fdp[i] = num; 
	}

	calc();
	
	cout << dp[requireCount];


	return 0;
}