zoukankan      html  css  js  c++  java
  • 区间调度(贪心)

    //区间调度
    /*
    问题描述:有N项工作,每项工作有开始时间si和结束时间ti,让你选择最多的工作,工作之间不存在时间交叉。
    输入:
    5
    1 3
    2 5
    4 7
    6 9
    8 10
    输出:
    3
    */
    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    
    const int MAX = 100000;
    
    int N, s[MAX], t[MAX];//输入,s开始时间,t结束时间
    
    pair<int, int> itv[MAX];//用于对工作排序的pair数组
    
    int main()
    {
        cin>>N;
        int i;
        for(i=0;i<N;i++) cin>>itv[i].second>>itv[i].first;//便于以结束时间排序,所以改存顺序
            /*cin>>s[i]>>t[i];*/
        sort(itv, itv + N);
    
        int ans = 0, t = 0;
        for(i = 0; i < N; i++){
            if(t < itv[i].second){
                ans++;
                t = itv[i].first;
            }
        }
    
        cout<<ans<<endl;
    
        system("pause");
        return 0;
    }
    
    /*
    贪心算法之所以能用,是基于以“结束时间最早”为前提的。但是这是需要你分析和证明的,你要先想明白为什么
    按结束时间最早排序才是正确的。
    1.因为结束时间最早,所以取相同数量的工作肯定它最早结束或至少不晚。
    2.如果后面还有工作,那么加入到结束最早算法的空间更大。
    因此就不会存在比它更多工作的可能。
    */
    世上无难事,只要肯登攀。
  • 相关阅读:
    nsight system
    unity 拿到管线权限的解决方案
    Erlang cowboy 入门参考
    [Erlang]Mnesia分布式应用
    erlang浅谈
    erlang 中带下划线变量的使用
    erlang 符号相关基本语法
    Erlang与ActionScript3采用JSON格式进行Socket通讯
    Erlang游戏开发-协议
    Erlang之IO编程
  • 原文地址:https://www.cnblogs.com/littlehoom/p/3430174.html
Copyright © 2011-2022 走看看