import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = scanner.nextInt(); } System.out.println(longestNonDecreasingSubsequence(a, n)); scanner.close(); } /** * 计算最长不下降子序列的长度 * @param a 输入数组 * @param n 数组长度 * @return 最长不下降子序列的长度 */ private static int longestNonDecreasingSubsequence(int[] a, int n) { // 边界情况处理 if (n == 0) { return 0; } // dp[i]表示以第i个元素结尾的最长不下降子序列的长度 int[] dp = new int[n]; // 初始化:每个元素自身可以构成一个长度为1的子序列 for (int i = 0; i < n; i++) { dp[i] = 1; } // 动态规划计算 for (int i = 1; i < n; i++) { // 检查所有在i之前的元素j for (int j = 0; j < i; j++) { // 如果a[j] <= a[i],说明可以将a[i]添加到以a[j]结尾的子序列后 if (a[j] <= a[i]) { dp[i] = Math.max(dp[i], dp[j] + 1); } } } // 找到dp数组中的最大值,即为最长不下降子序列的长度 int maxLength = 0; for (int length : dp) { maxLength = Math.max(maxLength, length); } return maxLength; } }