zoukankan      html  css  js  c++  java
  • 最大不重叠区间

    http://zju.acmclub.com/index.php?

    app=problem_title&id=1&problem_id=1126

    RT,给定n个区间。每一个区间有開始时间si和结束时间ei,

    问在数轴上怎样摆放能使在没有重叠区间的情况下区间数目达到最大?

    分析:典型的贪心思路。在《算法导论》贪心那一章的第一个样例即是它——活动选择问题

    解法:按区间的结束时间从小到大排序后。从小的区间按顺序选取;

    (1)假设当前区间与已经覆盖的位置重叠(与当前最右位置进行比較)。则舍弃;

    (2)否则将此区间摆放在数轴上并更新当前已经覆盖的最右位置

    cpp代码:

    #include<iostream>
    using namespace std;
    int main(){
        struct SEGMENT{
            int x;
            int y;
        };
        int n,si,ei,pos,k,tmp,i,cur;
        struct SEGMENT seg[101];
        while(cin>>n){
            pos = 0;
            if(n==0)break;
            while(n--){
                cin>>si>>ei;
                seg[pos].x=si;
                seg[pos].y=ei;
                pos++;
            }
            //BubbleSort
            for(k=1;k<pos;k++){
                for(i=0;i<pos-k;i++){
                    if(seg[i].y>seg[i+1].y){
                        //swap
                        tmp=seg[i+1].y;
                        seg[i+1].y=seg[i].y;
                        seg[i].y=tmp;
                        tmp=seg[i+1].x;
                        seg[i+1].x=seg[i].x;
                        seg[i].x=tmp;
                    }
                }
            }
            //main process
            cur=seg[0].y;
            int cnt=1;
            for(k=1;k<pos;k++){
                if(seg[k].x>=cur){
                    cur=seg[k].y;
                    cnt++;
                }
            }
            cout<<cnt<<endl;
        }
        return 0;
    }
    


  • 相关阅读:
    iOS进阶_三方使用步骤
    Runtime
    感想
    git
    随笔感想
    关于APP上架问题需要ipad图标的问题
    ubuntu安装
    JNI和NDK
    数据结构——队列链表实现
    数据结构——栈的实现(数组、Java)
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7043475.html
Copyright © 2011-2022 走看看