头歌实训作业 算法设计与分析-贪心算法(第3关:活动安排问题)

任务描述

本关任务:求解活动安排问题。

假定一个有n个活动(activity)的集合S={a 1 ,a 2,....,a n},这些活动使用同一个资源(例如同一个阶梯教室),而这个资源在某个时刻只能供一个活动使用。每个活动a i都有一个开始时间s i和一个结束时间f i,其中0<=s i<f i<=32767。如果被选中,任务a i 发生在半开时间区间[s i ,f i )期间。如果两个活动a i和a j满足[s i ,f i )和[s j ,f j )不重叠,则称它们是兼容的。也就说,若s i >=f j 或s j >=f i ,则a i和a j 是兼容的。在活动选择问题中,我们希望选出一个最大兼容活动集。

编程要求

根据提示,在右侧编辑器补充代码,计算并输出可兼容活动的最大数量。

测试说明

输入格式:

第一行一个整数n(n≤1000);

接下来的n行,每行两个整数,第一个s i​ ,第二个是f i​ (0<=s i <f i <=32767)。

输出格式:

输出最多能安排的活动个数。

输入样例:

11

3 5

1 4

12 14

8 12

0 6

8 11

6 10

5 7

3 8

5 9

2 13

输出样例:

4

样例解释:

最大可兼容活动数量为4。安排的4个活动为1 4, 5 7, 8 11和12 14。

测试代码:

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Action
{	
	/* 请在这里填写答案 */

/**********  Begin  **********/




/**********  End  **********/ 
};

int n;
vector<struct Action> A;	
//求解结果表示
vector<bool> flag;					//标记选择的活动
int Count = 0;					//选取的兼容活动个数

void solve()					//求解最大兼容活动子集
{
	/* 请在这里填写答案 */

/**********  Begin  **********/




/**********  End  **********/ 
}
int main()
{
	cin>>n;
	for(int i = 0; i < n; i++){
		Action t;
		cin>>t.b>>t.e;
		A.push_back(t);	
	}

	solve();

	cout<<Count<<endl;
	
	return 0;
}

补充代码:

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Action
{	
	/* 请在这里填写答案 */

/**********  Begin  **********/
int b;
int e;
bool operator < (const Action &s) const{
    return e < s.e;
}


/**********  End  **********/ 
};

int n;
vector<struct Action> A;	
//求解结果表示
vector<bool> flag;					//标记选择的活动
int Count = 0;					//选取的兼容活动个数

void solve()					//求解最大兼容活动子集
{
	/* 请在这里填写答案 */

/**********  Begin  **********/
sort(A.begin(), A.end());
int preEnd = 0;
for(int i=0 ; i<n; i++){
    if(A[i].b >= preEnd){
        flag.push_back(true);
        preEnd = A[i].e;
        Count++;
    }
    else{
        flag.push_back(false);
    }
}



/**********  End  **********/ 
}
int main()
{
	cin>>n;
	for(int i = 0; i < n; i++){
		Action t;
		cin>>t.b>>t.e;
		A.push_back(t);	
	}

	solve();

	cout<<Count<<endl;
	
	return 0;
}
相关推荐
故事和你914 小时前
sdut-程序设计基础Ⅰ-实验五一维数组(8-13)
开发语言·数据结构·c++·算法·蓝桥杯·图论·类和对象
像污秽一样4 小时前
算法与设计与分析-习题4.2
算法·排序算法·深度优先·dfs·bfs
Storynone5 小时前
【Day20】LeetCode:39. 组合总和,40. 组合总和II,131. 分割回文串
python·算法·leetcode
明明如月学长6 小时前
AI 更新太快学不过来?我用OpenClaw打造专属AI学习工作流
算法
黎阳之光6 小时前
【黎阳之光:以无线专网与视频孪生,赋能智慧广电与数字中国】
算法·安全·智慧城市·数字孪生
刀法如飞7 小时前
Agentic AI时代,程序员必备的算法思想指南
人工智能·算法·agent
刀法如飞7 小时前
Agentic AI时代程序员必备算法思想详解(附实战案例)
算法·ai编程·编程开发·agentic
飞Link8 小时前
告别盲目找Bug:深度解析 TSTD 异常检测中的预测模型(Python 实战版)
开发语言·python·算法·bug
记忆多8 小时前
c++名字空间 函数模版 左右值
开发语言·c++·算法
三伏5228 小时前
控制理论前置知识——相平面数学基础2(示例部分)
算法·平面·控制