ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 11055 번: 가장 큰 증가 부분 수열
    다이나믹프로그래밍(DP) 2018. 8. 2. 10:16
    반응형

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


    1. 문제

    수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수열은 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 이고, 합은 113이다.


    2. 알고리즘

    키워드 - 다이나믹 프로그래밍











    가장 큰 증가 부분 수열중 가장 큰 값은 113 이다.


    백준 11055번 가장 큰 증가 부분 수열.pptx




    3. 코드


    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <iostream>
    #include <sstream>
    #include <string>
    #include <algorithm>
    #include <functional>
    #include <vector>
    #include <list>
    #include <queue>
    #include <deque>
    #include <map>
    #include <set>
    #include <stack>
    #include <math.h>
    #include <memory.h>
     
    using namespace std;
     
    #define MAX_SIZE 100
    #define INF 0x7fffffff
    #define CENDL "\n"
    #define ll long long
     
    int main() {
        
        cin.tie(0);
        std::ios::sync_with_stdio(false);
     
        int n; cin >> n;
     
        vector<int> arr(n);
        for (int i = 0; i < n; i++) {
            cin >> arr[i];
        }
     
        int dp[1001];
        std::fill_n(dp, 10010);
        int sol = 0;
        for (int i = 0; i < n; ++i) {
            
            int cand = 0;
            for (int j = 0; j < i; ++j) {
                if (arr[i] > arr[j]) {
                    if (cand < dp[j]) {
                        cand = dp[j];
                    }
                }
            }
            dp[i] = cand + arr[i];
            if (sol < dp[i]) {
                sol = dp[i];
            }
        }
     
        cout << sol << "\n";
     
        return 0;
    }
    cs

    반응형

    '다이나믹프로그래밍(DP)' 카테고리의 다른 글

    백준 1463번: 1로 만들기  (0) 2018.08.09
    백준 1309번: 동물원  (0) 2018.08.04
    백준 1912번: 연속합  (0) 2018.07.03
    백준 10986번: 나머지 합  (0) 2018.07.01
    백준 1904번: 01타일  (0) 2018.06.24

    댓글

Designed by Tistory.