会场安排问题

问题描述:

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

代码:

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 struct node
 7 {
 8     int data;
 9     int flag;
10 };
11 
12 bool cmp(node a,node b)
13 {
14     return a.data<b.data;
15 }
16 
17 int f(vector<node> v)
18 {
19     int now=0,max=0;
20     vector<node>::iterator iter=v.begin();
21     for(;iter<=v.end();iter++)
22     {
23         if(iter->flag==1)
24         {
25             now++;
26             if(now>max)
27                 max=now;
28         }
29         else
30         {
31             now--;
32         }
33     }
34     return max;
35 }
36 
37 int main()
38 {
39     int n;
40     vector<node> vec;
41     node t;
42     int x;
43     cin>>n;
44     for(int i=1;i<=2*n;i++)
45     {
46         cin>>x;
47         t.data=x;
48         t.flag=i%2;
49         vec.push_back(t);
50     }
51     
52     sort(vec.begin(),vec.end(),cmp);
53     int ans=f(vec);
54     cout<<ans<<endl;
55     return 0;
56 }

输入示例:

5

1 23

12 28

25 35

27 80

36 50

输出示例:

3

猜你喜欢

转载自www.cnblogs.com/wangxuelin/p/9034568.html