문제

https://www.acmicpc.net/problem/11052
11052번: 카드 구매하기
첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)
www.acmicpc.net
코드
#include <iostream>
using namespace std;
int main(){
int n;
int dp[10001] = {0,};
cin >> n;
for(int i=1; i<=n; i++){
int a;
cin >> a;
int max = a;
for(int j=1; j<=i/2; j++){
if(max < dp[j]+dp[i-j]){
max = dp[j]+dp[i-j];
}
}
dp[i] = max;
}
cout << dp[n];
return 0;
}
정리
이전 dp값을 가지고 최댓값을 갱신하면서 해당 dp값을 찾으면 되는 문제이다.
참조
'Beakjoon > dynamic programming' 카테고리의 다른 글
| [백준] 1699번 제곱수의 합 (C++) - dynamic programming (0) | 2022.01.26 |
|---|---|
| [백준] 1912번 연속합 (C++) - dynamic programming (0) | 2022.01.26 |
| [백준] 15990번 1, 2, 3 더하기 5 (C++) - dynamic programming (0) | 2022.01.24 |
| [백준] 1463번 1로 만들기 (C++) - dynamic programming (0) | 2022.01.22 |
| [백준] 1003번 피보나치 함수 (C++) - dynamic programming (0) | 2022.01.21 |