AcWing 895. 【Java】最长上升子序列
原题链接
简单
作者:
tt2767
,
2020-03-05 22:25:36
,
所有人可见
,
阅读 688
/*
1. 状态定义: 数值严格单调递增的子序列的长度最长是多少 - > f[i] 表示以 a[i] 结尾的 ~ 长度是多少
2. 状态计算: 以最后一个位置i 为分割, 它可以接到前面的任意一个上升子序列上, 或独立
3. 边界: f[~] = 0;
*/
import java.util.*;
public class Main{
final static int maxN = 1000;
void run(){
int n = jin.nextInt();
int[] a = new int[n+1];
int[] f = new int[n+1];
for (int i = 1 ; i <= n ; i ++) a[i] = jin.nextInt();
f[1] = 1;
for (int i = 2; i <= n ; i ++){
f[i] = 1;
for (int j = 1 ; j < i ; j++ ){
if (a[j] < a[i]) f[i] = Math.max(f[i], f[j] + 1);
}
}
int res = Arrays.stream(f).max().getAsInt();
System.out.println(res);
}
private Scanner jin = new Scanner(System.in);
public static void main(String[] args){ new Main().run();}
}