1010. 拦截导弹
题目链接https://www.acwing.com/problem/content/1012/
第二个 问题其实就是求最长上升子序列
#include<iostream>
#include<algorithm>
using namespace std;
int a[1010];
int f[1010];
int q[1010];
int main(){
int i=0;
while(cin>>a[i])i++;
int res=0;
for(int j=i-1;j>=0;j--){
f[j]=1;
for(int k=i-1;k>j;k--){
if(a[k]<=a[j])
f[j]=max(f[j],f[k]+1);
}
res=max(f[j],res);
}
cout<<res<<endl;
int f=0,r=-1;
for(int j=0;j<i;j++){
while(f<=r&&a[j]>q[f])f++;
if(f<=r)
q[f]=a[j];
else
q[++r]=a[j];
f=0;
}
cout<<r+1;
return 0;
}