拿去AC吧。会场安排问题(贪心算法)

4 篇文章 0 订阅
3 篇文章 0 订阅

会场安排问题(贪心算法)

  1. 问题描述
    题目来源:王晓东《算法设计与分析》
    假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小
    会场数。)
    输入格式:
    第一行有 1 个正整数k,表示有 k个待安排的活动。
    接下来的 k行中,每行有 2个正整数,分别表示 k个待安排的活动开始时间和结束时间。时间以 0 点开始的分钟计。
    输出格式:
    输出最少会场数。

  2. 问题分析
    将会议开始时间和结束时间都排序,这时候会议的开始时间和结束时间都是升序的。遍历会议的开始时间,如果有会议i的开始时间小于某会议j的结束时间,那么该会议i一定是需要开辟一个新会场的,而当会议i开始时间大于某会议j的结束时间,该会议i可以利用之前的会场,而不需要开辟新的会场。

  3. 第一个AC代码

在这里插入代码片
#include <bits/stdc++.h>
using namespace std;
int beginn[10005];//存开始时间
int endd[10005];//存结束时间
int main()
{
 int n;//总活动个数
 int cnt = 0;//需要的最少会场数
       cin >> n;
 for (int i = 0; i < n; i++)
  cin >> beginn[i] >> endd[i];
 //按开始时间升序排列
 sort(beginn, beginn + n);
 //按结束时间升序排列
 sort(endd, endd + n);
 int j = 0;
 for (int i = 0; i < n; i++)
 {
  if (beginn[i] < endd[j])
   cnt++;
  else
   j++;
 }
 cout << cnt;
 return 0; 
}

4、 第二个AC代码
正常思路代码
5、第三个AC代码
高级,用STL,AC代码

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值