最长不上升子序列。
把最长上升子序列的代码稍微改动一下即可
详解请见:http://wenku.baidu.com/view/fe0deecea1c7aa00b52acb71.html
#include <cstdio>
#include <cstring>
#define N 10005
int n, a[N], c[N], dp[N];
int search(int l, int r, int x)
{
int mid;
while(l<=r)
{
mid = (r+l)/2;
if(c[mid]==x) return mid;
else if(x<c[mid]) l = mid+1;
else r = mid-1;
}
return l;
}
int main()
{
int t = 0, tt;
while(1)
{
n = 0;
while(1)
{
scanf("%d",&tt);
if(tt!=-1) a[++n] = tt;
else break;
}
if(n==0) break;
c[1] = a[1]; dp[1] = 1;
int size = 1;
for(int i = 2, j; i <= n; i++)
{
if(a[i]>c[1]) j = 1;
else if(a[i]<c[size]) j = ++size;
else j = search(1,size, a[i]);
c[j] = a[i];
}
if(t) printf("\n");
printf("Test #%d:\n maximum possible interceptions: %d\n",++t,size);
}
return 0;
}