除了顺序变成逆序之外,完全标准的最长递增子序列问题模板问题。


#include <iostream>
using namespace std;
​
//拦截导弹
int num[30];
int dp[30];
​
int maxdecrease(int n){
    int ans=0;
    dp[0]=1;
    for(int i=1;i<n;i++){
        int before=-1;//前面>=当前值中,最大的连续序列数
        int flag=0;//默认前面没有比它大的
        for(int j=0;j<i;j++){
            if(num[j]>=num[i]){
                flag=1;
                before=max(before,dp[j]);
            }
        }
        if(flag==0){
            dp[i]=1;
        }
        else{
            dp[i]=before+1;
        }
    }
    for(int i=0;i<n;i++){
        ans=max(ans,dp[i]);
    }
    return ans;
}
​
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>num[i];
    }
    int ans=maxdecrease(n);
    cout<<ans<<endl;
    return 0;
}