#문제

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

 

11052번: 카드 구매하기

첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)

www.acmicpc.net

 

#작성 코드

TOP-DOWN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
using namespace std;
 
int n;
int cards[1001];
int dp[1001];
 
int buy(int n){
    if( n==0 ){
        return 0;
    }
    if( dp[n]!=0 ){
        return dp[n];
    }
    
    for(int i=1; i<=n; i++){
        dp[n] = max(dp[n], buy(n-i)+cards[i]);
    }
    return dp[n];
    
}
int main(){
    cin>>n;
    for(int i=1; i<=n; i++){
        cin>>cards[i];
    }
    
    cout<<buy(n)<<'\n';
    return 0;
}
cs

BOTTOM-UP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
int n;
int cards[1001];
int dp[1001];        // dp[i] : i개 카드 구매할 수 있는 최대 지불 금액 
 
int main(){
    cin>>n;
    for(int i=1; i<=n; i++){
        cin>>cards[i];
    }
    
    for(int i=1; i<=n; i++){
        for(int j=1; j<=i; j++){
            dp[i] = max(dp[i], dp[i-j]+cards[j]);
        }
    }
    
    cout<<dp[n]<<'\n';
    return 0;
}
cs

##

https://ldgeao99.tistory.com/m/288 참고!!!

'BOJ' 카테고리의 다른 글

BOJ 2309번 :: 일곱 난쟁이  (0) 2020.02.03
BOJ 16500번 :: 문자열 판별  (0) 2020.02.03
BOJ 1699번 :: 제곱수의 합  (0) 2020.02.02
BOJ 9465번 :: 스티커  (0) 2020.02.02
BOJ 2618번 :: 경찰차  (0) 2020.02.01

+ Recent posts