• 活动安排问题(贪心算法)


    问题描述:

              有n个活动的活动集合E ,其中每一个活动都要求使用同一个资源,而在同一个时刻内资源只能被一个活动使用,每一个活动都有开始是时间和结束时间,要求从活动集合E中选出m个活动,使着m个活动都能顺利进行,即也就是每个活动的活动时间都互相不交叉,求m的最大值和 被选中的活动序号。

    例如输入:

    活动编号   活动开始时间    活动结束时间

    1                1                       4

    2                3                       5

    3                0                       6

    4                5                       7

    5                3                       8

    6                5                       9

    7                6                       10

    8                8                       11

    9                8                       12

    10              2                       13

    11              12                     14

       本程序利用贪心算法解决,输出的答案是:

    应该选择的活动编号为:

    1      4        8        11(即最大可以安排这4个活动)

    #include
    #include
    #include
    #include
    using namespace std;
    
    /*
    *活动安排问题(贪心算法)
    */
    
    struct Act
    {
    int beg;//活动的开始时间
    int end;//活动的结束时间
    int index;//活动的编号
    friend ostream & operator<<(ostream &o,const Act &A);   
    friend istream & operator>>(istream &o, Act &A);
    };
    ostream & operator<<(ostream &o,const Act &A)
    {
    o<>(istream &o, Act &A)
    {
    o>>A.index>>A.beg>>A.end;
    return o;
    }
    
    bool cmp(Act & act1,Act & act2)
    {
    if(act1.end GreedySelector(vector & acts)
    {
    //首先把活动按照活动的结束时间进行排序
    sort(acts.begin(),acts.end(),cmp);
    //在排序后的活动集合中选择可行的活动
    vector res;
    res.push_back(acts[0].index);//首先选中第一个活动
    int now = 0;//当前选中的活动下标
    for (int i = 1; i < acts.size(); i++)
    {
    if(acts[i].beg>=acts[now].end)
    {
    now = i;
    res.push_back(acts[i].index);
    }
    }
    return res;
    }
    
    int main()
    {
    vector acts;//可选活动集
    copy(istream_iterator(cin),istream_iterator(),back_inserter(acts));
    cout< res_act;//得出的方案中的活动编号集
    res_act = GreedySelector(acts);
    //输出结果
    copy(res_act.begin(),res_act.end(),ostream_iterator(cout,"  "));
    cout<
                    
  • 相关阅读:
    CmakeLists编译的动态库.so移动到其他位置后,提示找不到该库的依赖库解决办法
    五十、Django中间件
    超级详细的mysql安装和配置教程
    大二Web课程设计——家乡主题网页设计(web前端网页制作课作业) 四川旅游网页设计制作
    复习单片机:矩阵按键(内含1 矩阵按键介绍+2 硬件设计+3 软件设计+4原始代码+5 实验现象)
    【DS】算法的时间复杂度与空间复杂度
    【【实验分享】CCIE—BGP路由黑洞实验】
    《86盒应用于家居中控》——实现智能家居的灵动掌控
    OpenCV——图像分块局部阈值二值化
    真实场景下的安全专家各项技能详解
  • 原文地址:https://blog.csdn.net/m0_71272694/article/details/128058744