이 문제는 dp[n-1]의 값이 가장 긴 증가하는 부분 수열이 아니다!
dp[n-1] 은 n번째 숫자가 가질 수 있는 가장 긴 증가하는 부분 수열이고,
우리가 구해야 할 것은 전체 경우의 수 중 최댓값을 찾는 것이다!
그리고 하나 더 유의해야 할 게 max 값을 찾는 것으로 dp 배열을 구성하면, 기존의 dp 배열이 1이기 때문에 어디선가는 2가 나올 것이 3이 나오는 경우가 생기므로, 현재 dp배열보다 이전의 dp 배열이 같거나 클 떄만 더하기 연산을 해주자.
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[] dp;
static int[] A;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
dp = new int[N];
A = new int[N];
for (int i = 0; i < N; i++) {
A[i] = Integer.parseInt(st.nextToken());
}
Arrays.fill(dp, 1);
for (int i = 1; i < N; i++) {
for (int j = 0; j < i; j++) {
if (A[i] > A[j] && dp[i] <= dp[j]) {
dp[i] = dp[j] + 1;
}
}
}
int max = 0;
for (int n : dp) {
max = Math.max(n, max);
}
System.out.println(max);
}
}