728x90
다이나믹 프로그래밍 문제입니다.
N개의 카드를 살때 최대한 비싸게 사는 가격을 구하는 문제입니다.
각각 카드 n개마다의 가격이 따로 책정이 되어있습니다.
n개일때 가격
n-1개일때 가격 + 1개일때 가격
n-2개일때 가격 + 2개일때 가격
n-3개일때 가격 + 3개일때 가격
.....
n-m개일때 가격 + m개일때 가격
n개를 구할때 다음과 같은 경우의 수가 있습니다.
경우의 수 중 가장 값이 큰것을 DP에 저장합니다.
#include <iostream>
#include <algorithm>
using namespace std;
int maxNum = -987654321;
int num[10010];
int memo[10010];
void init()
{
for (int i = 0; i < 10010; ++i) {
num[i] = 0;
memo[i] = 0;
}
}
int main(int argc, char *argv[])
{
init();
int n;
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> num[i];
memo[i] = num[i];
}
memo[0] = num[0];
for (int i = 2; i <= n; ++i) {
for (int j = 1; j < i; ++j) {
memo[i] = max(memo[i], memo[i - j] + memo[j]);
}
}
for (int i = 1; i <= n; ++i) {
maxNum = max(maxNum, memo[i]);
}
cout << maxNum;
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 9465번 스티커 (0) | 2019.05.23 |
---|---|
[C++] 백준 2293번 동전1 (0) | 2019.05.22 |
[C++] 백준 11053번 가장 긴 증가하는 부분 수열 (0) | 2019.05.22 |
[C++] 백준 2577번 숫자의 개수 (0) | 2019.05.19 |
[C++] 백준 1978번 소수 찾기 (0) | 2019.05.19 |