求数组中最长递增子序列

本文介绍了一种求解数组中最长递增子序列长度的方法。通过动态规划,遍历数组并比较当前元素与之前元素的关系,更新最长子序列长度。最后输出每个元素前的最长递增子序列长度。
摘要由CSDN通过智能技术生成
#include<stdio.h>
/*
求数组中最长递增子序列长度:
例如:a[10]={1,-1,2,-2,3,-3,4,-4,5,6},递增序列为1,2,3,4,5,6
基本思想:
对于子序列a[0-i],它的最长子序列长度为b[i],
对于子序列a[0-i+1],它的最长子序列有两种情况:
一种是前面的都比a[i+1]大,那么它的最长子序列就是a[i]的最长子序列
一种是前面有比a[i+1]小的数字,那么它的最长子序列就是a[0-i]中取比a[i+1]小的最长子序列加一,
不用关注具体的序列,如果a[i+1]>a[i],那么a[0-i+1]的最长子序列一定是b[0-i]中某个数加一。
*/


void main()
{
    int i,j;
    int a[10]={1,-1,2,-2,3,-3,4,-4,5,6};
    int b[10];
    b[0]=1;
    for(i=0;i<10;i++){
        b[i]=1;
        for(j=0;j<i;j++){
            if((a[i]>a[j])&&(b[i]<=b[j])){
                b[i]=b[j]+1;
            }
        }    
    }

    //下面把b[i]=1的全部替换成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值