51nod贪心算法入门-----活动安排问题
2016-03-05 14:23
204 查看
有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动?
输入
输出
输入示例
输出示例
我们可以知道先安排最早结束的活动可以更多的安排活动。首先就是将所有的活动结束时间按先后顺序给排序;然后以结束时间为线索一路检索下去,判断开始时间是否早于前面一次活动的结束时间。这里可以用结构体或者两个数组来把一个活动的开始时间和结束时间联系起来。
//原本我还考虑了活动时间不能为负数的情况,但是在提交时系统给出的数据中把负数也给算了进去。。。。。
输入
第1行:1个数N,线段的数量(2 <= N <= 10000) 第2 - N + 1行:每行2个数,线段的起点和终点(-10^9 <= S,E <= 10^9)
输出
输出最多可以选择的线段数量。
输入示例
3 1 5 2 3 3 6
输出示例
2
我们可以知道先安排最早结束的活动可以更多的安排活动。首先就是将所有的活动结束时间按先后顺序给排序;然后以结束时间为线索一路检索下去,判断开始时间是否早于前面一次活动的结束时间。这里可以用结构体或者两个数组来把一个活动的开始时间和结束时间联系起来。
#include<stdio.h> #include<iostream> #define max 10001 using namespace std; int main(){ int n,i,j,temps,tempo; int start[max],over[max]; while(scanf("%d",&n)!=EOF){ int sum=0,t=-1000000000; for(i=0;i<n;i++){ cin>>start[i]>>over[i]; } for(i=0;i<n;i++) for(j=i;j<n;j++){ if(over[i]>over[j]){ tempo=over[i]; over[i]=over[j]; over[j]=tempo; temps=start[i]; start[i]=start[j]; start[j]=temps; } } for(i=0;i<n;i++){ if(t<=start[i]){ t=over[i]; sum+=1; } } printf("%d\n",sum); } return 0; }
//原本我还考虑了活动时间不能为负数的情况,但是在提交时系统给出的数据中把负数也给算了进去。。。。。
相关文章推荐
- QuickSort 快排算法 java
- numpy.argsort
- 【leetcode】Longest Common Prefix
- require笔札
- 自定义文本选择菜单
- SQL基础-->多表查询
- 前端性能优化之加载与执行(一)
- 【Xcode使用技巧】通过Xcode查看真机中应用程序的数据文件
- Python Basics
- SKPSMTPMessage实现邮件发送
- 蓝桥杯:FJ的字符串
- js 将json字符串转换为json对象
- CursorLoader
- ldirectord.cf文件详解
- 海明码原理
- numpy.ndarray.flatten
- STL vector的使用总结
- 关于Android连连看中的图片分布
- js中如何快速获取数组中的最大值最小值
- Python递归例子:汉诺塔问题