import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String[] str = sc.nextLine().split(" ");
int[] num = new int[str.length];
for(int i=0;i<str.length;i++)
{
num[i] = Integer.valueOf(str[i]);
}
int is = lengthOfLIS(num);
int as = min(num);
System.out.println(as);
System.out.println(is);
}
public static int lengthOfLIS(int[] nums) {
int n = nums.length;
if(n == 1){
return 1;
}
int[] dp = new int[n];
for(int i = 0;i<n;i++){
dp[i] = 1;
}
int ans = 0;
for(int i = 0;i<n;i++){
for(int j = 0;j<i;j++){
if(nums[i] >= nums[j]){
dp[i] = Math.max(dp[i],dp[j]+1);
}
}
if(dp[i] > ans){
ans = dp[i];
}
}
return ans;
}
public static int min(int[] nums) {
int n = nums.length;
if (n == 1) {
return 1;
}
int[] dp = new int[n];
for (int i = 0; i < n; i++) {
dp[i] = 1;
}
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
if (nums[i] <= nums[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
if (dp[i] > ans) {
ans = dp[i];
}
}
return ans;
}
}
蓝桥杯 算法训练 拦截导弹 Java
最新推荐文章于 2022-04-08 13:37:13 发布
该博客主要展示了如何用Java编程解决两个经典问题:计算一个整数数组的最长递增子序列(Length of Increasing Subsequence, LIS)和最小覆盖子序列(Minimum Covering Subsequence)。通过双重循环和动态规划,实现了这两个算法,并在主函数中进行了测试。文章适合有一定Java基础和对动态规划感兴趣的读者阅读。
1921

被折叠的 条评论
为什么被折叠?



