求最长上升子序列的长度(动态规划)

#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;	
} 
上一篇:JavaScript的padStart()和padEnd()格式化字符串使用技巧


下一篇:两个一维数组对应元素相加【C】