问题:假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的 贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个 顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小 会场数。)
输入:第一行有 1 个正整数k,表示有 k个待安排的活动。 接下来的 k行中,每行有 2个正整数,分别表示 k个待安排的活动开始时间和结束时间。时间 以 0 点开始的分钟计。
输出:输出最少会场数。
样例:
输入:
5
1 23
12 28
25 35
27 80
36 50
输出:3
代码:
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int main() { 5 int n; 6 int i, j; 7 int sum; 8 long long int a[10000]; 9 long long int b[10000]; 10 cin >> n; 11 sum = 0; 12 for (i = 0; i < n; i++) 13 //scanf("%lld %lld", &a[i], &b[i]); 14 cin >> a[i] >> b[i]; 15 sort(a, a + n);//开始时间单独排序 16 sort(b, b + n);//结束时间单独排序 17 j = 0; 18 for (i = 0; i<n; i++) 19 { 20 if (a[i]<b[j])//开始时间在结束时间前就加一个会场 21 sum++; 22 else 23 j++;//否则不用安排单独的会场直接放在此活动结束的会场然后遍历下一个结束的早的会场 24 } 25 //printf("%d\n", sum); 26 cout << sum << endl; 27 return 0; 28 }
浙公网安备 33010602011771号