본문 바로가기
공부/코딩 연습하기

[백준][C] 11053번 가장 긴 증가하는 부분 수열 (동적 계획법)

by 소소하지만유니크한 2020. 12. 22.
728x90

11053번 문제 설명

전체 성공 코드

#include <stdio.h>

#define MAX_N 1000

int getMax(int a, int b) {
    return a > b ? a : b;
}

int dp(int n, int* arr) {
    int DP_table[n + 1];
    int max_value = 1;
    DP_table[0] = 0; 
    for (int i = 1; i <= n; i++) {
        DP_table[i] = 1;
        for (int j = i - 1; j > 0; j--) {
            if (arr[i - 1] > arr[j - 1]) {
                DP_table[i] = getMax(DP_table[j] + 1, DP_table[i]);
            } 
        }
        max_value = getMax(DP_table[i], max_value);
    }
    return max_value;
}

int main()
{
    int n;
    scanf("\n%d", &n);
    int arr[MAX_N];
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    int ans = dp(n, arr);
    printf("%d", ans);
}

결과 화면

728x90

댓글