2073活动选择问题
2017-08-07 17:25
295 查看
活动选择问题
Problem Description
sdut 大学生艺术中心每天都有n个活动申请举办,但是为了举办更多的活动,必须要放弃一些活动,求出每天最多能举办多少活动。
Input
输入包括多组输入,每组输入第一行为申请的活动数n(n<100),从第2行到n+1行,每行两个数,是每个活动的开始时间b,结束时间e;
Output
输出每天最多能举办的活动数。
Example Input
Example Output
解题思路
只要各个活动时间段没有公共区间,我们就说它们兼容。该问题就是要找出一个由互相兼容的活动组成的最大子集。各项活动按照结束时间单调递增排序,进行求解即可。
代码
Problem Description
sdut 大学生艺术中心每天都有n个活动申请举办,但是为了举办更多的活动,必须要放弃一些活动,求出每天最多能举办多少活动。
Input
输入包括多组输入,每组输入第一行为申请的活动数n(n<100),从第2行到n+1行,每行两个数,是每个活动的开始时间b,结束时间e;
Output
输出每天最多能举办的活动数。
Example Input
12 15 20 15 19 8 18 10 15 4 14 6 12 5 10 2 9 3 8 0 7 3 4 1 3
Example Output
5
解题思路
只要各个活动时间段没有公共区间,我们就说它们兼容。该问题就是要找出一个由互相兼容的活动组成的最大子集。各项活动按照结束时间单调递增排序,进行求解即可。
代码
#include <stdio.h> #include <stdlib.h> struct activity{ int b; int e; }act[101],temp; int main() { int n,b,e,i,j,max=0,count,flag; while(~scanf("%d",&n)) { for(i=0;i<n;i++) { scanf("%d %d",&act[i].b,&act[i].e); } for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) { if(act[i].e>act[j].e) { temp=act[i]; act[i]=act[j]; act[j]=temp; } } } int cont=1; flag=act[0].e; for(i=1;i<n;i++) { if(act[i].b>=flag) { cont++; flag=act[i].e; } } printf("%d\n",cont); } return 0; }
相关文章推荐
- 2073活动选择问题
- SDUT 2073----活动选择问题
- 2073 活动选择问题【贪心】
- SDUT 2073 活动选择问题
- SDUTOJ 2073 —— 活动选择问题 贪心
- sdut 2073 活动选择问题
- 活动选择问题(sdut2073
- 贪心算法例题:2073活动选择问题
- SDUTOJ 2073 —— 活动选择问题
- [SDUT](2073)活动选择问题 ---贪心
- 经典问题-活动选择问题-DP和贪心
- 经典算法之活动选择问题
- 活动选择问题(贪心)
- 基于贪心策略的活动选择问题
- 贪心法 活动选择问题
- 活动选择问题
- 算法导论-第16章-贪心算法-16.1 活动选择问题
- 贪心之活动选择问题
- sdut 活动选择问题
- 活动选择问题