问题描述:一个有限时间中尽可能多的开很多会议。每个会议有开始时间和结束时间。设计出一种算法,得出在已知的各个会议中选出会议,使在这段时间中开的会议最多。
数据结构:结构体:
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;
}