现有10个活动,s表示开始时间,f表示结束时间。每个场地在任何时刻只能由一个活动占用,活动执行完毕前不能被打断。请说明要让这10个活动都执行完,至少需要多少个场地,使用c++写出代码,并画图说明各场地安排哪些活动
时间: 2023-10-08 16:07:38 浏览: 10
这是一个典型的贪心问题,可以按照结束时间从早到晚的顺序安排活动,并选择空闲场地中结束时间最早的给当前活动使用。如果没有空闲场地,则需要再开辟一个场地。这样做可以保证已经安排的活动结束时间尽可能早,给后面的活动留下更多的场地选择余地,从而最小化需要的场地数量。
以下是C++代码实现:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct Activity {
int id; // 活动编号
int start; // 开始时间
int finish; // 结束时间
};
bool cmp(Activity a, Activity b) {
return a.finish < b.finish; // 按结束时间排序
}
int main() {
vector<Activity> activities(10);
for (int i = 0; i < 10; i++) {
activities[i].id = i + 1;
cin >> activities[i].start >> activities[i].finish;
}
sort(activities.begin(), activities.end(), cmp); // 按结束时间排序
vector<int> rooms; // 记录每个场地当前占用的结束时间
for (int i = 0; i < 10; i++) {
int j;
for (j = 0; j < rooms.size(); j++) {
if (rooms[j] <= activities[i].start) { // 找到空闲场地
rooms[j] = activities[i].finish; // 安排当前活动
cout << "场地 " << j+1 << " 安排了活动 " << activities[i].id << endl;
break;
}
}
if (j == rooms.size()) { // 没有空闲场地,需要再开辟一个
rooms.push_back(activities[i].finish);
cout << "新增场地 " << rooms.size() << " 安排了活动 " << activities[i].id << endl;
}
}
cout << "共需要 " << rooms.size() << " 个场地" << endl;
return 0;
}
```
以下是样例输入和输出:
输入:
```
1 3
2 5
3 9
4 8
6 10
8 11
9 14
12 16
13 17
15 18
```
输出:
```
场地 1 安排了活动 1
场地 2 安排了活动 2
场地 2 安排了活动 3
场地 1 安排了活动 4
场地 1 安排了活动 5
场地 2 安排了活动 6
场地 1 安排了活动 7
场地 2 安排了活动 8
场地 1 安排了活动 9
场地 2 安排了活动 10
共需要 2 个场地
```
以下是画图说明各场地安排的活动:
场地1:
```
1-------4---5---7-------9-----------
```
场地2:
```
--2-----------6-------8-----10-----
```
相关推荐
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)