51Nod:活动安排问题——c语言版
来源:互联网 发布:sql查询成绩最高分 编辑:程序博客网 时间:2024/05/20 13:07
有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动?
这道题很多blog都有详解,不过就是贪婪算法基础,把所有时间段的尾端从小大进行排序,然后比较之后时间的开始时间和上一个的末尾时间,查看是否会有冲突。百度上很多都是用c++写的,不得不说很方便,因为c++封装了很多方法在Algorithm这个库中,免去了我们很多时间。所以我用c语言写了一个,仅供参考:
#include <stdio.h> #include <string.h>void sort (long int begin[],long int end[],int m);void swap (long int *x,long int *y);int main (void) { int n,i,j,k; int result = 1; long int begin[10002],end[10002]; scanf("%d",&n); memset(begin,0,sizeof(begin)); //数组赋初值 memset(end,0,sizeof(end)); for(i = 0;i < n;i++) { scanf("%d%d",&begin[i],&end[i]); } sort(begin,end,n);//比较后一个任务的开始时间和上一个任务的解释时间是否有冲突,没有冲突说明则+1,并且循环跳到那个任务上。 for(k = 0; k<n;k++) { for(j = k+1;j<n;j++){ if(end[k]<=begin[j]){ result++; k = j; } } } printf("%d",result); return 0;}//排序,先把所有时间段结束时间按照从小到大进行排序,如果结束时间相同,则把开始时间早的放前面。然后需要调换顺序的吧开始时间一起调换。void sort (long int begin[],long int end[],int m) { int i,j; for (i = 0;i<m;i++) { for (j = i+1;j<m;j++) { if(end[i] > end[j]) { swap(&end[i],&end[j]); swap(&begin[i],&begin[j]); }else if(end[i] == end[j] &&begin[i] > begin[j]) { swap(&end[i],&end[j]); swap(&begin[i],&begin[j]); } } }}//交换数组函数void swap (long int *x,long int *y) { long int temp; temp = *x; *x = *y; *y = temp;}
可以留言一起交流哟
阅读全文
0 0
- 51Nod:活动安排问题——c语言版
- 51Nod:活动安排问题(二)——c语言版
- 51nod 活动安排问题
- 活动安排问题 (51nod)
- 51nod 1428 活动安排问题
- 51nod 活动安排问题 (贪心)
- 51NOD 1428 活动安排问题
- 51nod 活动安排问题之二
- 51NOD OJ 活动安排类问题
- 51nod---1428 活动安排问题
- 51nod 活动安排问题 《贪心+dp》
- 51nod-活动安排问题之二
- 51nod 1428 活动安排问题
- 51nod-1428 活动安排问题
- 51Nod 1428 活动安排问题
- 活动安排问题-2 (51nod)
- 51nod 1428 活动安排问题
- 51Nod 活动安排问题(贪心)
- 关于mybatis事物不会回滚的原因
- 两个整数相除-LintCode
- switch的case分支中引用常量
- idea用新的窗口打开项目
- 在VMware虚拟机中安装CentOS 7.0
- 51Nod:活动安排问题——c语言版
- 获取已安装APP的apk文件
- python3-多线程
- 前端框架汇总
- 多个library使用butterknife的坑
- idea创建新的类(文件)时,自动添加作者创建时间(文件注释)等信息的设置方法
- thermal driver为zone device 添加sensor
- 替换空格
- 越限数据库功能 打印及画面拷贝功能