赞
踩
学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。
小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,
他想尽可能的安排更多的活动,请问他该如何安排。
简短理解题意:在不发生冲突的情况下,一天最多可以安排多少个会议?
目标:在有限的时间内,尽可能多地安排会议。
1.选最早开始的会议(缺点:会议可能结束的晚,也就是持续的时间会很长)
2.选结持续时间最短的会议(缺点:会议可能开始的很晚)
3.选择最早结束的会议
#include <iostream>
#include <iomanip>
#include <string.h>
#include <cmath>
#include <algorithm>//算法头文件
#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;
//盛放会议时间和次数的结构体
struct Meet{
int begin_time; //开始的时间
int end_time; //结束的时间
int num; //会议编号
}meet[100];
bool compare(Meet a, Meet b){
if(a.end_time == b.end_time){//如果结束时间相等,按照开始时间降序
return a.begin_time>b.begin_time;
}
return a.begin_time<b.begin_time;//按照开始时间升序(选择最早的时间)
}
int main(){
//输入会议总数
int n;
cout<<"请输入会议总数:"<<endl;
cin>>n;
//循环输入会议开始和结束的时间
cout<<"请输入会议的开始时间和结束时间\n";
for(int i=0; i<n; i++){
cin>>meet[i].begin_time>>meet[i].end_time;
meet[i].num = i+1;
}
//根据时间排序
sort(meet, meet+n, compare);
//输出一下排序后的 会议时间表
cout<<"编号\t开始时间\t结束时间\n";
for(int i=0; i<n; i++){
cout<<meet[i].num<<"\t"<<meet[i].begin_time<<"\t"<<meet[i].end_time<<endl;
}
int ns = 1;//计数,从一开始是因为第一个会议最早开始肯定符合
int last = meet[0].end_time; //取出第一个的结束时间
for(int i=1; i<n; i++){
if(meet[i].begin_time > last){//如果当前的开始时间大于上一个会议的结束时间,说明是可以的
ns++;
last = meet[i].end_time; //取出每一次的结束时间
}
}
cout<<"最多可以安排"<<ns<<"次会议"<<endl;
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。