본문 바로가기
백준

백준 동적 계획법 - 11053번 : 가장 긴 증가하는 부분 수열

by 맴썰 2022. 3. 5.

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

 

11053번: 가장 긴 증가하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이

www.acmicpc.net


import java.io.*;
import java.util.*;
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine());
		int[] num = new int[n+1];
		int[] memo = new int[n+1];
		for(int i=1; i<=n; i++) {
			num[i] = Integer.parseInt(st.nextToken());
		}
		int max = -1;
		for(int i=1; i<=n; i++) {
			for(int j=1; j<i; j++) {
				if(num[j]<num[i]) {
					memo[i] = Math.max(memo[j]+1,memo[i]);
				}
			}
			if(memo[i]==0) memo[i] = memo[0]+1;
			if(max<memo[i]) {
				max = memo[i];
			}
		}
		bw.write(max+"");
		bw.close();
	}
	
}