AcWing 895. 最长上升子序列
原题链接
简单
作者:
不知名的fE
,
2024-11-20 19:16:53
,
所有人可见
,
阅读 2
import java.util.*;
public class Main {
static final int N = 1010;
static int[] f = new int[N], a = new int[N];
/**
* 明确f的含义:f[i]表示以a[i]结尾的最长上升子序列的长度
* f[i] = max(f[j] + 1);(j在1 ~ i - 1之间)注:还需要和1取max,
* 有可能存在不进人j循环,如i等于1时或者a[i]为当前的最小值
* 对于本题答案就是遍历f数组得到最大值
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
String[] s = sc.nextLine().split(" ");
for (int i = 1; i <= n; i++) a[i] = Integer.parseInt(s[i - 1]);
int res = 0;
for (int i = 1; i <= n; i++) {
f[i] = 1;
for (int j = 1; j < i; j++)
if (a[i] > a[j]) f[i] = Math.max(f[i], f[j] + 1);
res = Math.max(res, f[i]);
}
System.out.println(res);
}
}