zoukankan      html  css  js  c++  java
  • 51nod 1133 不重叠的线段(贪心)

    基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
     收藏
     关注
    X轴上有N条线段,每条线段有1个起点S和终点E。最多能够选出多少条互不重叠的线段。(注:起点或终点重叠,不算重叠)。
    例如:[1 5][2 3][3 6],可以选[2 3][3 6],这2条线段互不重叠。
    Input
    第1行:1个数N,线段的数量(2 <= N <= 10000)
    第2 - N + 1行:每行2个数,线段的起点和终点(-10^9 <= S,E <= 10^9)
    Output
    输出最多可以选择的线段数量。
    Input示例
    3
    1 5
    2 3
    3 6
    Output示例
    2


    典型的贪心问题,操作是先让所有的线段按照末尾点的大小从小到大排序,然后如果排在后面的线段的前一端点大于前面线段的后端点则计数


    看代码:

    #include<iostream>
    #include<vector>
    #include<cstdio>
    #include<algorithm>
    #include<utility>
    #include<string.h>
    using namespace std;
    vector<pair<int,int> >vec;
    
    
    bool cmp(const pair<int,int>a,const pair<int,int>b)
    {
        return a.second<b.second;
    }
    
    
    int main()
    {
        int n;
        int a,b;
        int cnt=1;
        cin>>n;
        while(n--)
        {
            cin>>a>>b;
            vec.push_back(make_pair(a,b));
            //cout<<vec.size();
        }
        sort(vec.begin(),vec.end(),cmp);
        vector<pair<int,int> >::iterator it;
        it=vec.begin();
        int tmp=(*it).second;
        it++;
        for(;it!=vec.end();it++)
        {
            if((*it).first>=tmp)
            {
                cnt++;
                tmp=(*it).second;
    
            }
    
        }
        cout<<cnt<<endl;
    
        return 0;
    }
    


  • 相关阅读:
    游标
    浅析数据准备区中的数据结构
    浅析代理键替换管道
    浅析何时进行概况分析
    浅析Staging
    XHTML教程——表单
    XHTML教程——文字格式与特殊字符
    XHTML教程——列表
    XHTML教程——标签
    CSS入门教程——CSS简介
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387015.html
Copyright © 2011-2022 走看看