1 solutions

  • 0
    @ 2025-3-3 16:33:14

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    int a[30001],n,c; 
    
    //拦截的当前导弹的编号,拦截的数量,当前的高度 
    void dp(int i,int num,int h){
    	if(i>n) return;
    	//比较出最大值 
    	c = max(c,num);
    	//向后递归 
    	for(int k=i+1;k<=n;k++){
    		//如果高度 >= 当前导弹高度,则递归 
    		if( h >= a[k]){
    			dp(k,num+1,a[k]);
    		}else{
    			dp(k,num,h);
    		}
    	}
    }
    
    int main(){
       int i;
       cin>>n;
       for(i=1;i<=n;i++){
       		cin>>a[i];
       }
       //每个导弹都可能成为第一枚 
        for(i=1;i<=n;i++){
        	dp(i,1,a[i]);
    	}
       cout<<c;
        return 0;
    }
    
    
    
    • 1

    Information

    ID
    10535
    Time
    1000ms
    Memory
    16MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By