码迷,mamicode.com
首页 > 其他好文 > 详细

线性状态动态规划 P1020 导弹拦截【最长上升子序列】

时间:2020-06-13 12:48:24      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:不能   tor   回车   iter   nal   blog   导弹拦截   ISE   size   

题目

https://www.luogu.com.cn/problem/P1020

技术图片

 

 

 题目分析

系统最多能拦截的导弹数量就是这个序列的最长不上升子序列;而需要的系统数量就是这个序列的最长不下降子序列

方法一:使用贪心+二分(https://www.cnblogs.com/Jason66661010/p/13054793.html

代码

#include<iostream>
#include<set>
#include<cstdio>
#include<algorithm>
#include<functional>
using namespace std;
int list[100011];
int main()
{
    int len=0;
    while (cin >> list[len++]); len--;//注意这里的输入方式,使用scanf()的话由于数据最后没有回车,会超时
    multiset<int,greater<int> >out;//这里注意,greater<int>后面要有一个空格,不能与后面的>连起来
    multiset<int>out2;
    for (int i = 0; i < len; i++)
    {
        multiset<int, greater<int> >::iterator it=out.upper_bound(list[i]);
        if (it != out.end())out.erase(it);
        out.insert(list[i]);

        multiset<int>::iterator it2 = out2.lower_bound(list[i]);
        if (it2 != out2.end())out2.erase(it2);
        out2.insert(list[i]);
    }
    printf("%d\n", out.size());
    printf("%d", out2.size());
}

最长上升序列:

set<int>out;
set<int>::iterator it = out.lower_bound(list[i]);

最长不下降子序列:

multiset<int>out;
multiset<int>::iterator it = out.upper_bound(list[i]);

最长下降序列:

set<int, greater<int> >out;
set<int>::iterator it = out.lower_bound(list[i]);

最长不上升序列:

multiset<int, greater<int> >out;
multiset<int>::iterator it = out.upper_bound(list[i]);

 

线性状态动态规划 P1020 导弹拦截【最长上升子序列】

标签:不能   tor   回车   iter   nal   blog   导弹拦截   ISE   size   

原文地址:https://www.cnblogs.com/Jason66661010/p/13113440.html

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