#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;
}
相关文章
- 02-05动态规划---例题2.最长公共子序列问题
- 02-05动态规划(三)最长递增子序列长度(LIS)
- 02-05动态规划——最长公共子序列(LCS)
- 02-05动态规划--求最大连续子数组的和(Python实现)&求解最大连续乘积字串(Python实现)
- 02-05最大子序和、最长上升子序列长度
- 02-05求最长上升子序列的长度(动态规划)
- 02-05洛谷P1091 合唱队形---最长上升子序列的运用
- 02-052021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组)
- 02-05动态规划之最长公共子序列
- 02-05LeetCode刷题日记2021-4-3/1143.最长公共子序列/动态规划