美文网首页
最大递增子序列 动态规划

最大递增子序列 动态规划

作者: suntwo | 来源:发表于2019-05-08 17:09 被阅读0次

分析

eg:
a[]  1,4,8,2,0,6,3,10,43,65,2,8,3,2,7,10
定义b[]存储每个位置最大的子序列

a[]    1,4,8,2,0,6,3,10,43,65,2,8,3,2,7,10
b[]                                         4 2 3  3  2  1
可以看到倒数第三个和倒数第四个的最大递增子序列都是3,倒数第四个的取值是倒数第二个的2+1得出的,倒数第五个是2,是由倒数第一个得出的1+1,倒数第六个是4,是由倒数第四个3+1得出的。。。。。

代码分析

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[]={1,4,8,2,0,6,3,10,43,65,2,8,3,2,7,10};
    int lang=sizeof(a)/4;
    int b[lang],c[lang];
    int i;
    for(i=0;i<lang;++i)
    {
        b[i]=1;    //用来存储最大的个数
        
    }
    for(i=lang-1;i>0;--i)
    {
        int max=0;
        int j;
        for(j=i+1;j<lang;++j)
        {
            if(a[i]<a[j] && max<b[j])
                max=b[j];     //求出前面最大的递增子序列的个数
        }
        b[i]+=max;
    }
    for(i=0;i<lang;++i)
        printf("%d\n",b[i]);
    return 0;
}

运行结果

1  5  4  5  5  4  4  3  2  1  4  2  3  3  2  1

相关文章

网友评论

      本文标题:最大递增子序列 动态规划

      本文链接:https://www.haomeiwen.com/subject/fjjvoqtx.html