C++ 求最长递增子序列(动态规划)

i 0 1 2 3 4 5 6 7 8
a[i] 1 4 7 2 5 8 3 6 9
lis[i] 1 2 3 2 3 4 3 4 5

时间复杂度为n^2的算法:

//求最长递增子序列
//2019/2/28
#include<iostream>
using namespace std;
int LIS(int a[],int N)
{ int lis[] = {};
for(int i =;i<N;i++)//给每一个数的lis赋初值为1
{
lis[i]=;
}
for(int i = ;i<N;i++)
{
for(int j =;j<i;j++)
{
if(a[j]<a[i]&&lis[j]<lis[i]+) //找出当前元素前面比它小的元素,比较其lis值
lis[i] = lis[j] + ;
}
}
int max = lis[];
for(int i =;i<N;i++)
{
if(lis[i]>max)
max = lis[i]; //找出lis数组中最大值,即最长有序子序列的长度
}
return max;
}
int main()
{
int N;
int a[];
while(cin>>N)
{
for(int i = ;i<N;i++)
cin>>a[i];
cout<<LIS(a,N)<<endl; }
return ;
}
上一篇:classifier in maven


下一篇:zabbix之 qq邮件报警