패키지

[백준][DP]11722_가장 긴 감소하는 부분 수열 본문

카테고리 없음

[백준][DP]11722_가장 긴 감소하는 부분 수열

업단업업 2017. 10. 9. 18:35


문제 --> https://www.acmicpc.net/problem/11722


11053과 반대로 생각해서 풀면 된다!

그런데 전에 풀었던 것 보다 메모리가 늘어났다,, 이유가 뭘까,,


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
import java.util.*;
public class P11722 {
    public static void main(String[] args) {
        
        //LIS 의 반대로 풀기
        //수열A를 뒤집어서 가장 긴 증가하는 부분 수열을 구하는 방법
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int a[] = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }
        
        int d[] = new int[n];
        
        //반대로 이번에는, j > i , a[j] > a[i]
        for (int i = 0; i < n; i++) {
            d[i] = 1;
            for (int j = 0; j < i; j++) {
                if (a[j] > a[i] && d[i] < d[j] + 1) {
                    d[i] = d[j] + 1;
                }
            }
        }
        
        //줄어드는 순서대로 정렬된 배열 d의 최댓값
        int ans = d[0];
        for (int i = 0; i < n; i++) {
            if(ans < d[i]) {
                ans = d[i];
            }
        }
        System.out.println(ans);
        
    }
 
}
 
cs


Comments