题意:
题解:
第一问就是求一个最长下降子序列。
第二问每次都把当前导弹加入到最小的大于等于它高度的系统里。
代码:
#include<bits/stdc++.h>
using namespace std;
int n=1;
int dp[1010];
int q[1010],f[1010],cnt;
int main(){
while(cin>>q[n])n++;
//输入结束后n会比实际的长度大 1
n-=1;
int ans=0;
for(int i=n;i>=1;i--){
dp[i]=1;
for(int j=i+1;j<=n;j++){
if(q[j]<=q[i])dp[i]=max(dp[i],dp[j]+1);
}
ans=max(ans,dp[i]);
}
cout<<ans<<endl;
for(int i=1;i<=n;i++){
int k=1;
while(k<=cnt&&q[i]>f[k])k++;
if(k>cnt)cnt++;
f[k]=q[i];
}
cout<<cnt<<endl;
return 0;
}
题后反思:
每次从前往后遍历的时候就自动实现了加入到最小的大于等于它的高度的系统。