1298活动选择(贪心)
作者:互联网
Description
学校的大学生艺术中心周日将面向全校各个学院的学生社团开放,但活动中心同时只能供一个社团活动使用,并且每一个社团活动开始后都不能中断。现在各个社团都提交了他们使用该中心的活动计划(即活动的开始时刻和截止时刻)。请设计一个算法来找到一个最佳的分配序列,以能够在大学生艺术中心安排不冲突的尽可能多的社团活动。
比如有5个活动,开始与截止时刻分别为:
最佳安排序列为:1,4,5。
Input
第一行输入活动数目n(0<n<100);
以后输入n行,分别输入序号为1到n的活动使用中心的开始时刻a与截止时刻b(a,b为整数且0<=a,b<24,a,b输入以空格分隔)。
Output
输出最佳安排序列所包含的各个活动(按照活动被安排的次序,两个活动之间用逗号分隔),如果有多个活动安排序列符合要求输出字典序最小的序列。
Sample
Input
6 8 10 9 16 11 16 14 15 10 14 7 11
Output
1,5,4
1 #include <iostream> 2 #include <algorithm> 3 #include <string.h> 4 #include <vector> 5 #include <queue> 6 7 #define inf 0x3f3f3f3f 8 9 using namespace std; 10 11 struct node 12 { 13 int left, right, id; 14 }huo[105]; 15 16 bool cmp(struct node a, struct node b) 17 { 18 return a.right<b.right || (a.right==b.right&&a.id<b.id); 19 } 20 21 int main() 22 { 23 int n, i, top, cur; 24 int re[105]; 25 cin >> n; 26 for(i=0;i<n;i++) 27 { 28 cin >> huo[i].left >> huo[i].right; 29 huo[i].id = i+1; 30 } 31 sort(huo, huo+n, cmp); 32 top = 0; 33 cur = 0; 34 for(i=0;i<n;i++) 35 { 36 if(huo[i].left >= cur) 37 { 38 re[top++] = huo[i].id; 39 cur = huo[i].right; 40 } 41 } 42 for(i=0;i<top;i++) 43 { 44 if(i==top-1) cout << re[i] << endl; 45 else cout << re[i] << ","; 46 } 47 return 0; 48 }
标签:right,活动,huo,选择,1298,社团活动,序列,include,贪心 来源: https://www.cnblogs.com/0xiaoyu/p/14094149.html