dp最长递增子序列问题

dp最长递增子序列问题

题目描述
  • 求解最长递增子序列问题。给定一个无序的整数序列a[0…n-1],求其中最长递增子序列的长度(不一定连续)。
  • 输入格式:
    第一行为正整数n,表示序列元素个数,第二行依次输入n个数。
    9
    2 1 5 3 6 4 8 9 7
  • 输出格式:
    输出最长递增子序列的长度。
    5
  • 解题的思路:(动态规划)
    从小范围到大的范围,双层循环进行遍历,第一层控制每个需要判断的元素第二层控制状态的变化:第二层最多循环到当前的第一层的循环的位置,且如果第一层循环当前元素大于第二层的,那就需要对dp数组进行更新(得到当前dp与比较元素对应的下标的dp值得最大值),dp数组元素均初始化为1(代表自身)
代码实现如下:(Java)
package DP;//

import java.util.Arrays;
import java.util.Scanner;

// Created by Chenglong Shi on 2021/12/11.
// Only can use to study
// Once found commercial or illegal use will be pursued to the end
// Banning plagiarism
// Email:2230307855@qq.com
// 内部可能含有拼音和汉语注释
// by 史成龙
// 方法:
//
public class 最长递增子序列个数 {
    private static final int ma=(int)1e4+1;
    private static int[]a=new int[ma];
    private static int[]s=new int[ma];
    private static int n;
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        n=in.nextInt();
        for(int i=0;i<n;i++) a[i]=in.nextInt();
        get_form();
        int max_len=-1;
        for(int k:s) if(max_len<k) max_len=k;
        System.out.println(max_len);
        in.close();
    }
    private static void get_form(){
        Arrays.fill(s,1);
        for(int i=0;i<n;i++){
            for(int j=0;j<i;j++){
                if(a[i]>a[j]){
                    s[i]=Math.max(s[i],s[j]+1);
                }
            }
        }
    }
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SweetCode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值