求最长上升子序列的长度(动态规划)
作者:互联网
#include<bits/stdc++.h>
using namespace std;
// 时间复杂度o(n^2)
int a[555];
int maxLen[555];
int main()
{
int n;
cin>>n; // 输入元素个数
for(int i=1;i<=n;i++)
{
cin>>a[i]; // 输入任意序列
maxLen[i]=1; // 以每个位置为终点的最长上升子序列长度初始化为1
}
for(int i=2;i<=n;i++) //每次求以第i个数为终点的最长上升子序列的长度
{
for(int j=1;j<i;j++) //查看以第j个数为终点的最长上升子序列的长度
{
if(a[i]>a[j])
maxLen[i]=max(maxLen[i],maxLen[j]+1); // 状态转移方程
}
}
//求出maxLen中的最大值就是最长上升子序列
cout<<*max_element(maxLen+1,maxLen+555+1); //这里利用STL求出数组中最大值
return 0;
}
标签:maxLen,int,cin,555,序列,长度,最长 来源: https://blog.csdn.net/weixin_47511190/article/details/113921512