P1020 导弹拦截
P1020 导弹拦截
打的最多是最长不下降,最少是最长上升,因为打了小的一个就必须再开一个系统。
#include<bits/stdc++.h> using namespace std; int f[110],a[110],b[110],n,ff[110]; int an; int ans; int main() { int n=0; while(scanf("%d",&a[++n])!=EOF) { b[n]=a[n]; } n--; sort(b+1,b+n+1); int l=unique(b+1,b+n+1)-b; for(int i=1;i<=l;i++) a[i]=lower_bound(b+1,b+n+1,a[i])-b; for(int i=1;i<=n;i++) { f[i]=1; ff[i]=1; } for(int i=1;i<=n;i++) for(int j=1;j<i;j++) { if(a[i]<=a[j]) f[i]=max(f[i],f[j]+1); an=max(an,f[i]); } cout<<an<<endl; for(int i=1;i<=n;i++) for(int j=1;j<i;j++) { if(a[j]<a[i]) ff[i]=max(ff[i],ff[j]+1); ans=max(ans,ff[i]); } cout<<ans; return 0; }