您的位置:首页 > 其它

dp专题 第一题最长上升子序列

2017-04-05 11:14 169 查看
1、简单描述

给出一个序列,找出他最长上升子序列的长度

2、思路

#include <bits/stdc++.h>

using namespace std;

int b[1000];

int maxlen[1000];

int main()

{

   int i,j,n;

   cin>>n;

   for(i=1;i<=n;i++)

   {

       cin>>b[i];

   }                                                                                             //输入原序列

   maxlen[1]=1;

   for(i=2;i<=n;i++)

   {

       int temp =0;

       for(j=1;j<=i;j++)

       {

           if(b[i]>b[j])

           {

               if(temp<maxlen[j])

                temp=maxlen[j];

           }

       }

       maxlen[i]=temp+1;                                                          //缩小问题规模,解决子问题

   }

   int Max=-1;

   for(i=1;i<=n;i++)

   {

       if(Max<maxlen[i])

        Max=maxlen[i];

   }                                                                                         //将最长上升子序列长度赋给max

   cout<<Max<<endl;

   return 0;

}

将问题转化为将第k个元素为最终元素时的最长上升子序列,子问题只与元素位置有关。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: