ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 11052 - 카드 구매하기
    백준 algorithm 2020. 4. 14. 15:42

    문제 설명

     

     

    => DP 문제입니다. 

     

    => 카드 i개를 구매할 때의 최대 비용을 생각해야 합니다.

    => D[i] : 카드 i개 구매하는 최대 비용

     

     

    =>카드 i개를 구매하는 방법의 가짓수

     

    • 카드 1개 들어있는 카드팩 구매, 카드 i - 1개 구매

    • 카드 2개 들어있는 카드팩 구매, 카드 i - 2개 구매

    • ....

    • ....

    • ....

    • 카드 i 개 들어있는 카드팩 구매, 카드 0개 구매

     

     

     

     

     

    이를 나타내면

     

     

    • P[1] + D[i-1] 

     

     

    위와 같이 표현할 수 있습니다.

    이를 코드로 표현하면 

     

     

    for(int i=1; i<=N; i++ )
        {
            for( int j=1; j <= i; j++)
            {
                D[i] =  max(D[i], D[i - j] + P[j]);
            }
        }
        

     

    위와 같은 코드가 됩니다.

     

     

     

     

     

    
    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <vector>
    #include <list>
    
    
    using namespace std;
    
    
    int main()
    {
        ios_base::sync_with_stdio(false);
        cin.tie(nullptr);
        cout.tie(nullptr);
        
        int N;
        cin >> N;
        
        vector<int> P(N+1);
        vector<int> D(N+1);
        
        int tmp;
        for(int i=1; i<= N; i++)
        {
            cin >> tmp;
            P[i] = tmp;
        }
        
        
        for(int i=1; i<=N; i++ )
        {
            for( int j=1; j <= i; j++)
            {
                D[i] =  max(D[i], D[i - j] + P[j]);
            }
        }
        
        cout <<D[N] <<'\n';
        
        
    }
    
    

     

     

     

     

     

    실행 화면 1

     

    실행 화면 2

    '백준 algorithm' 카테고리의 다른 글

    백준 15990 - 1, 2, 3 더하기 5  (0) 2020.04.23
    백준 16194 - 카드 구매하기 2  (0) 2020.04.15
    백준 11726 - 2 x n 타일링 (c+  (0) 2020.04.06
    백준 1463 - 1로 만들기  (0) 2020.04.06
    백준 11653 - 소인수분해  (2) 2020.04.05

    댓글

Designed by Who.