zoukankan      html  css  js  c++  java
  • 背包问题《会议问题》

    问题描述:一个有限时间中尽可能多的开很多会议。每个会议有开始时间和结束时间。设计出一种算法,得出在已知的各个会议中选出会议,使在这段时间中开的会议最多。

    数据结构:结构体:

    struct Meet
    {
     int number;
     int begin;
     int end;
    };

    代码:

    #include<iostream>
    #include<algorithm>
    using namespace std;

    struct Meet
    {
     int number;
     int begin;
     int end;
    };

    bool cmp(Meet a, Meet b);
    //会议时间的输入
    //会议时间排序
    //会议的安排——重点
    int main()
    {
     int datanum;
     cin >> datanum;
     Meet *ps = new Meet[datanum];
     //会议时间的输入
     for (int i = 0; i < datanum; i++)
     {
      cin >> ps[i].begin >> ps[i].end;
      ps[i].number = i + 1;
     }
     //会议时间排序
     sort(ps, ps + datanum, cmp);
     for (int i = 0; i < datanum; i++)
     {
     //会议的安排——重点
     int num = 0;
     int Ibegin = 0;
     for (int i = 0; i < datanum; i++)
     {
      if (Ibegin + 1 <= ps[i].begin)
      {
       Ibegin = ps[i].end;
       num++;
     }

     cout << num << endl;

     delete[]ps;
     ps = NULL;
     return 0;
    }
    bool cmp(Meet a, Meet b)
    {
     return a.end < b.end;
    }

    思维方式:贪心算法。

        寻找上一个会议与下一个会议之间的关系。及上一个会议的结束时间加1为下一个会议开始时间提供了最小时间的范围。

        将这个作为排序的标准来进行选择。

    bool cmp(Meet a, Meet b)
    {
     return a.end < b.end;
    }

  • 相关阅读:
    集合
    WPF自定义控件--模拟手机密码输入控件,在输入时显示最后一个输入密码字符
    配置VS不生成XML和PDB文件
    Wlan常见命令(可以查看连接密码)
    云栖社区用机器人爬CSDN的文章?
    Marshal.PtrToStringAnsi中文乱码
    各种手工DIY
    yii2修改默认控制器
    3D模型网站分享
    SemanticZoom配合GridView组件的使用关键点
  • 原文地址:https://www.cnblogs.com/damaoranran/p/8602315.html
Copyright © 2011-2022 走看看