头歌实训作业 算法设计与分析-贪心算法(第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;
}
相关推荐
ytttr8735 小时前
隐马尔可夫模型(HMM)MATLAB实现范例
开发语言·算法·matlab
点云SLAM6 小时前
凸优化(Convex Optimization)理论(1)
人工智能·算法·slam·数学原理·凸优化·数值优化理论·机器人应用
jz_ddk6 小时前
[学习] 卫星导航的码相位与载波相位计算
学习·算法·gps·gnss·北斗
放荡不羁的野指针6 小时前
leetcode150题-动态规划
算法·动态规划
sin_hielo6 小时前
leetcode 1161(BFS)
数据结构·算法·leetcode
一起努力啊~6 小时前
算法刷题-二分查找
java·数据结构·算法
水月wwww7 小时前
【算法设计】动态规划
算法·动态规划
码农水水7 小时前
小红书Java面试被问:Online DDL的INSTANT、INPLACE、COPY算法差异
算法
iAkuya8 小时前
(leetcode)力扣100 34合并K个升序链表(排序,分治合并,优先队列)
算法·leetcode·链表
我是小狼君8 小时前
【查找篇章之三:斐波那契查找】斐波那契查找:用黄金分割去“切”数组
数据结构·算法