zoukankan      html  css  js  c++  java
  • 今年暑假不AC

    hdoj 2037

    贪心算法--活动安排问题模型

    使用贪心算法的关键是证明可以设用贪心:

    设E={1,2,3,...n}为所给出的活动的集合,  设集合A为原问题的最优解 ,由于按照活动结束时间已经排好序,所以第一个活动具有最早结束时间,将1加入集合A中,原问题将转化为对E中所有与活动1相容的活动进行安排的子问题, 并且E中最早的开始时间必须大于等于A中最晚结束时间,将原问题的规模缩小了,这样可以迭代的进行,A中最晚的结束时间是最后加入的活动的结束时间。

    #include <iostream>
    #include <algorithm>
    #include <bitset>
    using namespace std;
    struct node
    {
        int beg,end;
    };
    node Time[105];
    int n;
    bool operator <(const node &a,const node &b)
    {
        return a.end<b.end;
    }
    
    void greedySelect()
    {
        bitset<105> b;
        sort(Time,Time+n);
        b.reset();
        int j=0;
        b[j]=1;
        for(int i=1;i<n;i++)
        {
            if(Time[i].beg>=Time[j].end)
            {
                b[i]=1;
                j=i;
            }
        } 
        cout<<b.count()<<endl;
    }
    int main()
    {
        while(cin>>n,n)
        {
            for(int i=0;i<n;i++)
                cin>>Time[i].beg>>Time[i].end;
             greedySelect();
        }
            
        system("pause");
        return 0;
    }
    

  • 相关阅读:
    守护进程(Daemon)
    Socket select的用法
    被误解的C++——磨刀不误砍柴工
    C++ 虚函数表解析
    进程间通信IPC
    pthread_join函数及linux线程
    详细讲解C++ 类的继承
    Trilogy公司的笔试题
    linux下fork的使用
    Ruby 编程规范
  • 原文地址:https://www.cnblogs.com/hpustudent/p/2188341.html
Copyright © 2011-2022 走看看