题目的关键是求最长非递增数列的数量,因此dp数组用来存放每一条数列的最小值
当这个值比所有的都要小的时候
就开一个新的数列
否则就更新…
多做题啊骚年
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string>
#include<memory.h>
using namespace std;
int dp[2000];
int main()
{
int n;
memset(dp,0,sizeof(dp));
while(cin>>n)
{
if(n==0)break;
int sum=0,x;
for(int a=1;a<=n;a++)
{
scanf("%d",&x);
int b;
for(b=1;b<=sum;b++)
{
if(dp[b]>=x)
{
dp[b]=x;
break;
}
}
if(b>sum)
{
sum++;
dp[sum]=x;
}
}
cout<<sum<<endl;
}
return 0;
}