(dp)acwing1010. 拦截导弹

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_46028214/article/details/115271590