文章

121

粉丝

68

获赞

94

访问

20.4k

头像
拦截导弹 题解:最大增长子序列取同且仅计算个数问题
P1256 北京大学机试题
发布于2025年2月5日 16:50
阅读数 85

#include <bits/stdc++.h>
using namespace std;

int main(){
    int n;
    while(cin>>n){
        std::vector<int> a(n),b(n,1);
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        int ans=b[0];
        for(int i=1;i<n;i++){
            for(int j=0;j<i;j++){
                if(a[j]>=a[i])b[i]=max(b[i],b[j]+1);
            }
            ans=max(ans,b[i]);
        }
        cout<<ans<<endl;
    }
}

对最大增长子序列进行修改,在基础问题中,b存储的是实际的高度,计算出来的就是高度长,如果我们全存1,就是当前的拦截最小个数,我们进行迭代,如果可以下降或平高拦截,就加一,并判断当前的拦截数量是否是最多,逐渐生成得到结果。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发