求最长不下降序列求最长不下降序列求最长不下降序列 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); }