题目:导弹拦截
思路:最长不上升子序列
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 15
#define inf (1<<30)
int n;
int a[maxn+5]= {0};
int f[maxn+5]={0};
bool cmp(int x,int y){
return y<x;
}
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int len=1;
f[1]=a[1];
for(int i=2; i<=n; i++) {
if(a[i]<f[len]) {
f[++len]=a[i];
continue;
}
int x=lower_bound(f+1,f+len+1,a[i],cmp)-f;
f[x]=max(a[i],f[x]);
}
printf("%d",len);
return 0;
}