最长上升子序列

来源:互联网 发布:魅族云相册软件 编辑:程序博客网 时间:2024/06/04 18:36

这个问题的话,代码如下,你需要做的就是看着代码,然后自己走一遍,什么都会了。

#include <stdio.h>#define  MAX 1000int seq[MAX+10];int seqlen[MAX+10];int main(){    int i,j,k,N,max,maxlen=1;    for(i=1;i<=9;i++)        seqlen[i]=1;               //seqlen数组存以第i个数为终点的最长上升序列    scanf("%d",&N);    for(i=1;i<=N;i++)        scanf("%d",&seq[i]);       //seq数组保存序列数组    for (i=2;i<=N;i++)    {        max=0;        for (j=1;j<=i-1;j++)        {            if(seq[j]<seq[i]&&seqlen[j]>max)  //在前i-1个序列中,寻找以终点小于seq[i]的最长的子序列,即最优子状态                max=seqlen[j];        }        seqlen[i]=max+1;        if(seqlen[i]>maxlen)           //seqlen中保存的是第i个数为终点的最长上升序列,找出这个数组中最大的值即为最优序列长度            maxlen=seqlen[i];    }    printf("%d\n",maxlen);    return 0;}


0 0