最长上升子序列

一个数列的最长上升子列,是指其所有递增的子列中最长的一个子列

给定一个长度为 n 的数列 an,求这个数列的最长上升子列的长度

例如对数列 1 7 2 8 3 4,这个数列的最长递增子数列是 1 2 3 4,长度为 4;次长的长度为 3, 包括 1 7 8、1 2 3 等。

收起

输入

第一行一个正整数 n,表示数列元素个数,n<=1000

第二行 n 个正整数,从左到右给出数列的每一项

输出

一行一个正整数,表示最长上升子数列的长度

输入样例

8
5 1 6 8 2 4 5 10

输出样例

5

老师刚讲完,特地来巩固一下,唉,对于DP,我感到理解起来比较困难,看着那些大佬们AC题目,而自己却束手无策,感到很颓废,在加上运动太少,透支太狠,成功又感冒(距离上次感冒不出一周),难受啊。

这道题目,寒假刷51nod遇见过,那时想了比较长的时间,还是无思路,就放弃做别的了,现在终于A过了,算是对我如今的状况的一种慰藉,

确定思路:以每个元素作为序列中最后一个元素,求当前序列最大串长,最后在寻找所有“最大串长”中的最优

AC代码:

#include
#include
#include
#include
#include
#include 
#include 
#include 
#include
#include
#include 
#include
#include 
#include 
typedef long long ll;
using namespace std;
ll ans[10000]; ll maxl[10000];
int main()
{
    ll t;
    cin>>t;
    for(ll i=0;i>ans[i];
    }ll maxm=-0x7fffffff;
    for(ll i=0;ians[j]) l=max(maxl[j],l);//寻找以当前元素为末尾的最大序列长减一
        }
        maxl[i]=l+1;
        maxm=max(maxl[i],maxm);
    }
    cout<

 

你可能感兴趣的:(动态规划)