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

最大递增子序列 动态规划

作者: 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