问题大意:给出一组数,求这个数列的最长子序列
解题思路:从1到N,求以第i个数结尾的最长子序列
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int arr[1000],arrlen[1000];
//arr数组用于储存数据,arrlen数组用于储存以arr[i]为结尾的最长子序列
int N,maxlen,se=sizeof(arrlen);
//maxlen用于输出最大长度,se用于记录arrlen数组的长度,以便于进行初始化
int main()
{
while(cin>>N)
{
maxlen=1;
memset(arrlen,0,se);
arrlen[1]=1;
//这里不能直接将arrlen数组初始化为1,详情请看
//(https://blog.csdn.net/Move_now/article/details/52745887)
for(int i=1;i<=N;i++)
cin>>arr[i];
for(int i=2;i<=N;i++)
{
int mx=0;//记录当前最长子序列的长度
for(int j=1;j<=i-1;j++)
{
if(arr[j]<arr[i]&&arrlen[j]>mx)
mx=arrlen[j];
//如果arr[i]之前的元素小于arr[i]并且对应的长度大于当前已知的最大长度,
//就代表此时这个长度加上arr[i]是最大的
}
arrlen[i]=mx+1;//因为判断的是从1到i-1,所以mx要加一
if(arrlen[i]>maxlen)
maxlen=arrlen[i];
}
printf("%d\n",maxlen);
}
return 0;
}