【输入形式】 两行。 第1行为一个正整数n,表示整数的个数,n≤1000。 第2行为n个整数。 【输出形式】 一个整数,为最长单调递增子序列的长度。使用java
时间: 2024-02-23 09:01:38 浏览: 142
以下是使用动态规划求解最长单调递增子序列长度的 Java 代码:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] nums = new int[n];
int[] dp = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = input.nextInt();
dp[i] = 1;
}
int max_len = 1;
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (nums[j] < nums[i] && dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
}
}
if (dp[i] > max_len) {
max_len = dp[i];
}
}
System.out.println(max_len);
}
}
```
该程序使用 dp[i] 表示以 nums[i] 结尾的最长单调递增子序列长度,初始值为 1。然后遍历 nums 数组,对于每个 i,枚举 j 从 0 到 i-1,如果 nums[j] < nums[i] 且 dp[j] + 1 大于 dp[i],则更新 dp[i] 的值。最后遍历 dp 数组,找出最大值即为最长单调递增子序列长度。
阅读全文