ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DP_백준_정수 삼각형_1932
    Algorithm 2018. 8. 15. 23:42



    1. 정의 : dp[n][m] : n행 m열 일때 합이 최대가 되는 경로의 합

    2. 점화식 : dp[n][m] = max(dp[n-1][m], dp[n-1][m-1])+value[n][m]

    3. 초기화 : dp[0][0] = value[0][0];

    4. 반례 : m=0 일때 주의


    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
    #include <iostream>
    using namespace std;
     
    int main() {
        int count;
        cin >> count;
        int ** value = new int*[count];  // input
        int ** dp = new int*[count]; // memoization
     
        for (int i = 0; i < count; i++) {
            value[i] = new int[count];
            dp[i] = new int[count];
        }
     
        for (int i = 0; i < count; i++) {
            for (int j = 0; j <= i; j++) {
                cin >> value[i][j];
            }
            for (int j = 0; j < count; j++) {
                dp[i][j] = 0;
            }
        }
        dp[0][0= value[0][0];
        //Initiallize
        
        for (int i = 1; i <= count - 1; i++) {
            for (int j = 0; j <= i; j++) {
                if (j == 0||(dp[i-1][j]>dp[i-1][j-1])) {
                    dp[i][j] = dp[i - 1][j] + value[i][j];
                }
                else {
                    dp[i][j] = dp[i - 1][j - 1+ value[i][j];
                }
            }
        }
     
        int max = 0;
        for (int i = 0; i < count; i++) {
            if (max < dp[count - 1][i]) {
                max = dp[count - 1][i];
            }
        }
        cout << max << endl;
    }
    cs


    'Algorithm' 카테고리의 다른 글

    DP_백준_쉬운 계단 수_10844  (0) 2018.08.16
    DP_백준_붕어빵 판매하기_11052  (0) 2018.08.16
    DP_백준_RGB거리_1149  (0) 2018.08.15
    DP_백준_1,2,3 더하기_9095  (0) 2018.08.15
    DP_백준_2*n타일링2_11727  (0) 2018.08.15
Designed by Tistory.