6
思路见注释
#include <iostream>
#define N 20
using namespace std;
int fintfirst(int *a,int n,int k)
{
for(int i=0;i<n;i++)
if(a[i]>=k)
return i;
return n;
}
int main()
{
int a[N];
int l[N];
int n;
cin>>n;
cin>>a[0];
l[0]=1;
for(int i=1;i<n;i++)
{
cin>>a[i];
int max=0;
for(int j=0;j<i;j++)
if(a[i]<=a[j]&&l[j]>max)
max=l[j];
l[i]=max+1;
}
int posmin[N];//用以记录每个非递增序列的最小元素
int persize=1;//当前非递增子序列的个数
posmin[0]=a[0];
for(int i=1;i<n;i++)
{
/*
如果现在这个高度比所有非递增子序列的最小元素都大
责说明应该增加一套系统
如果可以加在一个序列后面则更新
*/
int m=fintfirst(posmin,persize,a[i]);
if(m==persize)
persize++;
posmin[m]=a[i];
}
cout<<l[n-1]<<endl;
cout<<persize<<endl;
return 0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- hzar.cn 版权所有 赣ICP备2024042791号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务