贪心算法之会议安排

因不考虑每个会议带来的收益问题,只需要考虑如何安排最多的会议,因此只需要根据会议的结束时间排序,优先选择会议结束时间更早的。并用left记录上一个会议的结束时间,下一个会议的开始时间需要大于等于left.

 1  #include <iostream>
 2  #include <algorithm>
 3  using namespace std;
 4   struct Meet{
 5       int beg;
 6       int end;
 7   };
 8   bool compare(Meet x,Meet y)
 9   {
10       if(x.end==y.end)
11          return x.beg>y.beg;
12       return x.end<y.end;
13   }
14   int meetingasignment(Meet a[],int end_time,int n)
15   {
16     int left=a[0].end;
17     int ans=1;//计算课安排的会议数量
18     for(int i=1;i<n;i++)
19     {
20        if((left<=a[i].beg)&&(a[i].end<=end_time))
21        {
22          ans++;
23          left=a[i].end;
24        }
25        else
26           continue;
27     }
28     return ans;
29     
30   }
31   
32   int main ()
33   {
34       int n;
35       int end_time;
36       Meet oneday[100];
37       cout<<"请输入待安排会议数量:";
38       cin>>n;
39       cout<<"请输入一天会议的结束时间:";
40       cin>>end_time;
41       cout<<"请输入会议的开始与结束时间";
42       for(int j=0;j<n;j++)
43       {
44           cin>>oneday[j].beg>>oneday[j].end;
45       }
46       sort(oneday,oneday+n,compare);
47       int number=meetingasignment(oneday,end_time,n);
48       cout<<"一天可安排的最大会议数为:"<<number;
49       return 0;
50   }

 测试数据:

n=10;end_time=18;

会议开始结束时间:3 6 1 4 5 7 2 5 5 9 3 8 8 11 6 10 8 12 12 14

 

posted @ 2025-05-13 21:03  打飞机的小怪兽  阅读(9)  评论(0)    收藏  举报