https://www.acmicpc.net/problem/11052
11052번: 카드 구매하기
첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)
www.acmicpc.net
i번째 카드까지 구매하는데 가장 큰 금액을 dp[i]라 하자. dp[i+1]을 정할때 Pi[i+1] (해당 단일 카드팩 구매시 금액) ,dp[1]+dp[i], dp[2]+dp[i-1], ....를 모두 비교해 가장 큰 값으로 정하면, 모든 경우를 따질 수 있다. 사이트에 나와 있는 예제들을 이용해 알고리즘을 따져보면 검증해 볼 수 있다. 비교적 간단한 문제였던것 같다.
#include <cstdio>
#include <algorithm>
using namespace std;
int main(void){
int N, Pi[10001]={0,}, dp[10001]={0, };
scanf("%d",&N);
for(int i=1; i<=N; i++){
scanf(" %d", &Pi[i]);
int maxi=Pi[i];
for(int j=1; j<i/2+1; j++)
maxi=max(maxi, dp[j] + dp[i-j]);
dp[i]=maxi;
}
printf("%d",dp[N]);
}
'알고리즘 문제' 카테고리의 다른 글
[C/C++ 백준 2294번] 동전2 (Silver 1) (0) | 2020.05.10 |
---|---|
[C/C++ 백준 1149번] RGB거리 (Silver 1) (0) | 2020.05.09 |
[C/C++ 백준 1660번] 캡틴 이다솜 (Silver 2) (0) | 2020.05.07 |
[C/C++ 백준 1890번] 점프 (Silver 2) (0) | 2020.05.07 |
[C/C++ 백준 2133번] 타일 채우기 (Silver 2) (0) | 2020.05.06 |