【动态规划】求最长不下降序列

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ssllyf/article/details/82812011

求最长不下降序列

Description

设有n(n<=1000)个不相同的整数(小于32767)组成的数列,记为:

a1,a2,…,an,其中任意两个数不相同。

例如:3,18,7,14,10,12,23,41,16,24。

若有 且有 。则称为长度为e的不下降序列。如上例中,3,18,23,24为一个长度为4的不下降序列,同时也有3,7,10,12,16,24长度为6的不下降序列。程序要求,当原始数列给出后,求出最长的不下降数列的长度。

Sample Input

10

3 18 7 14 10 12 23 41 16 24

Sample Output

6

解题思路

用两个循环来枚举到哪个个数的最长不下降序列和这个数可能连接到的不下降序列。

#include<cstdio>
#include<iostream>
using namespace std;
int num,n,a[1001],sum[1001];
int main()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
	  {
	  	scanf("%d",&a[i]);
	  	sum[i]=1;
	  	for (int j=1;j<i;j++)
	  	  if (a[j]<a[i]&&sum[j]>=sum[i])//如果a[j]比a[i]小并且第j个数的不下降序列比当前的长或相等
	  	    sum[i]=sum[j]+1;
	  	num=max(num,sum[i]);//判断当前段是否为最优
	  }
	printf("%d",num);
}

猜你喜欢

转载自blog.csdn.net/ssllyf/article/details/82812011