suseoj 1210: 会场安排问题 (贪心)

本文介绍了一个经典的会场安排问题,并提供了一种基于贪心算法的有效解决方案。通过将活动间的冲突映射为图的顶点和边,文章探讨了如何找到使相邻活动在不同会场进行的最小会场数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1210: 会场安排问题

时间限制: 1 Sec  内存限制: 128 MB
提交: 1  解决: 1
[ 提交][ 状态][ 讨论版][命题人: liyuansong]

题目描述

假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小会场数。)

对于给定的k个待安排的活动,计算使用最少会场的时间表。

输入

第1行有1个正整数k,表示有k个待安排的活动。下来的k行中,每行有2个正整数,分别表示k个待安排的活动的开始时间和结束时间。间以0点开始的分钟计。

输出

将计算出的最少会场数输出。

样例输入

5
1 23
12 28
25 35
27 80
36 50

样例输出

3

C/C++代码实现(AC):
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <stack>
 7 #include <map>
 8 #include <queue>
 9 #include <climits>
10 
11 using namespace std;
12 const int MAX = 1e6 + 10;
13 int a, b, ans = 1, temp, n;
14 struct node
15 {
16     int x, y;
17 } P[MAX];
18 
19 bool cmp(node a, node b)
20 {
21     return a.y < b.y;
22 }
23 
24 int main()
25 {
26     scanf("%d", &n);
27     for (int i = 0; i < n; ++ i)
28     {
29         scanf("%d%d", &a,&b);
30         P[i].x = a,
31              P[i].y = b;
32     }
33     sort(P, P + n, cmp);
34     temp = P[0].y;
35     for (int i = 0; i < n; ++ i)
36     {
37         if (P[i].x > temp)
38         {
39             temp = P[i].y;
40             ++ ans;
41         }
42     }
43     printf("%d\n", ans);
44     return 0;
45 }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值