BOJ::11054 가장 긴 바이토닉 부분 수열

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


가장 긴 증가하는 부분 수열 을 저장하는 inc배열에 가장 긴 증가하는 부분수열을 담고

이를 이용해 가장 긴 감소하는 부분수열을 구하면서 업데이트 시켰다.


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
#include <stdio.h>
using namespace std;
 
int a[1000];
int inc[1000];
int dec[1000];
 
int max(int a, int b) {
    return (a > b) ? a : b;
}
 
int main() {
    int n;
    scanf("%d"&n);
 
    for (int i = 0; i < n; i++) {
        scanf("%d"&a[i]);
    }
 
    int res = 0;
    for (int i = 0; i < n; i++) {
        inc[i] = 1;
        for (int j = 0; j < i; j++) {
            if (a[i] > a[j]) {
                if (inc[i] < inc[j] + 1) {
                    inc[i] = inc[j] + 1;
                }
            }
        }
        if (inc[i] > res) {
            res = inc[i];
        }
    }
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (a[i] < a[j]) {
                if (dec[i] < max(inc[j],dec[j])+1) {
                    dec[i] = max(inc[j], dec[j]) + 1;
                }
            }
        }
        if (res < dec[i]) {
            res = dec[i];
        }
    }
    printf("%d\n", res);
}
cs


'BOJ::문제풀이' 카테고리의 다른 글

14889 스타트와 링크  (0) 2018.01.14
14499 주사위 굴리기  (0) 2018.01.09
10159 저울  (0) 2018.01.08
14501 퇴사  (0) 2018.01.07
14442 벽 부수고 이동하기 2  (0) 2018.01.07

+ Recent posts