本题需要使用贪心算法来解决,具体步骤如下:

  1. 将所有活动按照结束时间从小到大排序。

  2. 选择第一个活动,将它加入到已选择的活动集合中。

  3. 对于剩下的活动,如果它的开始时间大于等于已选择的活动集合中最后一个活动的结束时间,则将它加入到已选择的活动集合中。

  4. 重复步骤3,直到所有活动都被选择完毕。

代码实现如下:

#include #include using namespace std;

struct Activity { int start; int end; };

bool cmp(Activity a, Activity b) { return a.end < b.end; }

int main() { int n; cin >> n; Activity activities[n]; for (int i = 0; i < n; i++) { cin >> activities[i].start >> activities[i].end; } sort(activities, activities+n, cmp); int lastEnd = 0; int count = 0; for (int i = 0; i < n; i++) { if (activities[i].start >= lastEnd) { count++; lastEnd = activities[i].end; } } cout << count << endl; return 0; }

输入样例:

6 1 3 2 4 3 5 4 6 5 7 6 8

输出样例:

4

解释:选择的活动为1、2、4、6

c++活动安排问题:设有n个活动的集合E=12…n其中每个活动都要求使用同一资源如演讲会场等而在同一时间内只有一个活动能使用这一资源。1	每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi且sifi 。如果选择了活动i则它在半开时间区间si fi内占用资源。2	若区间si fi与区间sj fj不相交则称活动i与活动j是相容的。也就是说当si≥fj或sj≥fi时活动i与活动j相容。运行

原文地址: https://www.cveoy.top/t/topic/eHyu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录