티스토리 뷰


가장 긴 증가 수열에 대하여 arr[0]~arr[i] 까지, 역순으로 arr[i]~arr[0]에 대하여 구하고, 각각의 값을

dp[i].first와 dp[i].second에 저장, dp 배열 first와 second의 합의 최대값을 구합니다.


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
#include <iostream>
using namespace std;
 
int arr[1001];
pair <intint> dp[1001];
int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
 
    for (int i = 0; i < n; i++) {
        dp[i].first = 1;
        for (int j = 0; j < i; j++) {
            if (arr[j] < arr[i] && dp[i].first < dp[j].first + 1) {
                dp[i].first = dp[j].first + 1;
            }
        }
    }
 
    for (int i = n-1; i >= 0; i--) {
        dp[i].second = 0;
        for (int j = n-1; j >= i; j--) {
            if (arr[j] < arr[i] && dp[i].second < dp[j].second + 1) {
                dp[i].second = dp[j].second + 1;
            }
        }
    }
    
    int result = 0;
    for (int i = 0; i < n; i++) {
        int t = dp[i].first + dp[i].second;
        result = result < t ? t : result;
    }
 
    cout << result;
}
cs


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함