用c++实现贪心算法的活动按排问题
时间: 2024-06-13 09:08:08 浏览: 88
利用贪心算法编程实现活动安排问题.txt
以下是C++实现贪心算法的活动安排问题的代码和解释:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
struct Activity {
int start, end;
};
bool cmp(Activity a, Activity b) {
return a.end < b.end; // 按结束时间从小到大排序
}
int main() {
int n;
cin >> n;
Activity a[n];
for (int i = 0; i < n; i++) {
cin >> a[i].start >> a[i].end;
}
sort(a, a + n, cmp); // 按结束时间从小到大排序
int ans = 1, end = a[0].end; // 初始化
for (int i = 1; i < n; i++) {
if (a[i].start >= end) { // 如果当前活动的开始时间大于等于上一个活动的结束时间
ans++; // 将当前活动加入最大相容活动子集
end = a[i].end; // 更新结束时间
}
}
cout << ans << endl;
return 0;
}
```
解释:
1. 定义结构体`Activity`,包含开始时间和结束时间两个成员变量。
2. 定义比较函数`cmp`,按照结束时间从小到大排序。
3. 读入活动的个数`n`和每个活动的开始时间和结束时间。
4. 对所有活动按照结束时间从小到大排序。
5. 初始化最大相容活动子集的元素个数为1,即第一个活动。
6. 从第二个活动开始遍历,如果当前活动的开始时间大于等于上一个活动的结束时间,则将当前活动加入最大相容活动子集,并更新结束时间。
7. 输出最大相容活动子集的元素个数。
阅读全文