n个会议,不同开始时间,结束时间,求一天最多能参加的会议数量是多少
贪心策略:选择结束时间最快的会议参加,在结束时间相等的前提条件下选择开始时间最大的会议=>选择会议时长最短的参加。
#include<iostream>
#include<algorithm>
const int maxnum = 100;
using namespace std;
struct Meet {
int beg;
int end;
}meet[maxnum];
bool cmp(Meet m1, Meet m2)
{
if (m1.end == m2.end)
return m1.beg > m2.beg;
return m1.end < m2.end;
} //从大到小
int main()
{
int n; //会议总数
cout << "输入总共的会议数量:" << endl;
cin >> n;
cout << "分别输入会议的开始时间和结束时间:" << endl;
for (int i = 0; i < n; i++)
{
cin >> meet[i].beg >> meet[i].end;
}
sort(meet, meet + n, cmp); //第一个元素 第二个元素 比较函数
int last = meet[0].end; //选择第一个会议
int num = 1; //最大能参加的会议数量
for (int i = 1; i < n; i++)
{
if (meet[i].beg >= last)
{
last = meet[i].end;
num++;
}
}
cout << "最多能参加的会议数量为:" << num << endl;
return 0;
}
测试
10
3 6
1 4
5 7
2 5
5 9
3 8
8 11
6 10
8 12
12 14
6021

被折叠的 条评论
为什么被折叠?



