动态规划——最长上升子序列

最长上升子序列

E题

#include<stdio.h>
#include<string.h>
int main() //1299 最长上升子序列的长度
{   int n,m,i,k,nMax,a[1010], MaxLen[1010];
 //m存放以ak为终点最长上升子序列长度的最大值
    scanf("%d",&n); //输入序列长度n
    for(i=1; i<=n; i++)
	   scanf("%d",&a[i]); //输入n个整数a[i]
    MaxLen[1]=1;  //初始化以第一个数为
                    //终点的最长上升子序列长度1
    for(k=2; k<=n; k++)  //求以ak为终点的
    {   m=0;                   //最长上升子序列长度
	   for(i=1; i<k; i++) //循环用ak与左边ai比较
            if(a[k] > a[i] && m<MaxLen[i])
	       {
	           m=MaxLen[i];
	       }
	    MaxLen[k]=m+1;
	}
   nMax = -1; //初始化nMax
//求以ak为终点最长上升子序列最大长度
   for(i=1; i<=n; i++)
      if(nMax < MaxLen[i])
         nMax = MaxLen[i];
//输出最大长度
printf("%d\n",nMax);
   return 0;
}

猜你喜欢

转载自blog.csdn.net/wjt_1025/article/details/89526405