码迷,mamicode.com
首页 > Windows程序 > 详细

AcWing 1010. 拦截导弹

时间:2019-11-30 09:19:08      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:cin   结束   main   而且   turn   res   int   str   out   

//贪心加dp 
#include<iostream>
using namespace std ;
const int N=1010;
int n;
int q[N];
int f[N];
int g[N];//存每个序列末尾的数字 
int main() {
    while(cin>>q[n]) n++;
    int res=0;
    for(int i=0; i<n; i++) {
        f[i]=1;
        for(int j=0; j<i; j++) {
            if(q[j]>=q[i])
                f[i]=max(f[i],f[j]+1);
            res=max(res,f[i]);
        }
    }
    cout<<res<<endl;
    int cnt=0;//表示序列个数
    for(int i=0; i<n; i++) {
        int k=0;//表示已经遍历的序列的个数
        while(k<cnt&&g[k]<q[i])//没有遍历完所有序列,而且序列最后小于q[i]
            k++;//往后找
        g[k]=q[i];//当上述循环结束的时候,要么遍历完所有数组,要么找到了小于的
        if(k>=cnt) cnt++;//第一次k为0,cnt为0   所以直接 g[k]=q[i]
                        //因为此时k>=cnt 所以cnt++ 即有一个序列 
    }
    cout<<cnt<<endl;
    return 0;
}

 

 

AcWing 1010. 拦截导弹

标签:cin   结束   main   而且   turn   res   int   str   out   

原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11961171.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!