其他分享
首页 > 其他分享> > 求最长上升子序列的长度(动态规划)

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

作者:互联网

#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