https://www.acmicpc.net/problem/11568
코드설명
동적계획법(Dynamic Programming, DP) + LIS(Longest Increasing Subsequence) 를 활용합니다.
문제의 설명을 읽다보면, LIS 의 값을 구하라는 것을 알 수 이습니다.
동적계획법을 사용안한다면, 완전탐색으로 1000 ! 의 시간복잡도가 나올 수 있음을 알 수 있습니다.
코드
package Main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int N, C, H, W, K, M, T;
static int[] arr;
static int answer = 0;
static int[] cache;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
arr = new int[N];
cache = new int[N+1];
Arrays.fill(cache, -1);
st = new StringTokenizer(br.readLine());
for(int i=0;i<N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
System.out.println(LIS(-1) - 1);
}
static int LIS(int now) {
if(cache[now + 1] != -1) return cache[now+1];
int ret = 1;
for(int next = now + 1; next < N; next++) {
if(now == -1 || arr[now] < arr[next]) {
ret = Math.max(ret, LIS(next) + 1);
}
}
return cache[now + 1] = ret;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 13565 침투 - DFS(깊이우선탐색) + BFS(넓이우선탐색) JAVA (0) | 2024.09.05 |
---|---|
[백준] 11724 연결 요소의 개수 - DFS(깊이우선탐색) JAVA (0) | 2024.09.04 |
[백준] 11279 최대 힙 - 우선순위큐(PriorityQueue) JAVA (0) | 2024.09.02 |
[백준] 11213 양 한마리... 양 두마리... - BFS(너비우선탐색) + DFS(깊이우선탐색) JAVA (0) | 2024.09.02 |
[백준] 9184 신나는 함수 실행 - 동적계획법(DP, Dynamic Programming) JAVA (0) | 2024.08.30 |