가장 긴 증가하는 부분 순열과 비슷하지만 약간의 트릭으로 스택에 수열을 넣고 다시 빼놓아서 뒤집어주고 동일한 방법으로 가장 긴 증가하는 부분 순열을 구하면 된다. 스택에 들어간 일련의 원소들은 순서가 뒤집어주는 성질이 있다. 유용하게 사용하자

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
 
#include <iostream>
#include <algorithm> 
#include <stack>
using namespace std
int d[1050];
int seq[1050];
stack<int> make_reverse;
int main() 
{
    int input = 0;
    cin >> input;
    for (int i = 1; i <= input; ++i)
    {
        cin >> seq[i];
        make_reverse.push(seq[i]);
    }
    for (int i = 1; i <= input; ++i)
    {
      seq[i] = make_reverse.top();
        make_reverse.pop();
    }
    for (int i = 0; i <= input; ++i)
        d[i] = 1;
    for (int i = 2; i <= input; ++i)
    {
        for (int j = 1; j < i; ++j)
        {
            if (seq[i] > seq[i - j])
                d[i] = max(d[i], d[i - j] + 1);
        }
    }
    int ans = 0;
    for (int i = 1; i <= input; ++i)
        ans = max(ans, d[i]);
    cout << ans;
    return 0;
 
}
cs


'백준 온라인 저지' 카테고리의 다른 글

백준 13398: 연속합 2  (0) 2018.07.10
백준 1912: 연속합  (0) 2018.07.09
백준 11053: 가장 긴 증가하는 부분 순열  (0) 2018.07.09
백준 2156: 포도주 시식  (0) 2018.07.09
백준 9465: 스티커  (0) 2018.07.09

+ Recent posts