博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
活动选择
阅读量:4491 次
发布时间:2019-06-08

本文共 1405 字,大约阅读时间需要 4 分钟。

类似题目:https://www.cnblogs.com/huashanqingzhu/p/10323739.html

学校在最近几天有n个活动,这些活动都需要使用学校的大礼堂,在同一时间,礼堂只能被一个活动使。由于有些活动时间上有冲突,学校办公室人员只好让一些活动放弃使用礼堂而使用其他教室。   

现在给出n个活动使用礼堂的起始时间begini和结束时间endi(begini < endi),请你帮助办公室人员安排一些活动来使用礼堂,要求安排的活动尽量多。
【输入】 第一行一个整数n(n<=1000);  
接下来的n行,每行两个整数,第一个begini,第二个是endi(begini< endi <=32767)
【输出】 输出最多能安排的活动个数。
【样例输入】
  11
  3 5
  1 4
  12 14
  8 12
  0 6
  8 11
  6 10
  5 7
  3 8
  5 9
  2 13
【样例输出】
   4

分析:

• 算法模型:给n个开区间(begini,endi), 选择尽量多的区间, 使得两两不交。

• 做法: 首先按照end1<=end2<…<=endn的顺序排序,依次考虑各个活动, 如果没有和已经选择的活动冲突, 就选; 否则就不选。
• 正确性: 如果不选end1, 假设第一个选择的是endi,则如果endi和end1不交叉则多选一个end1更划算; 如果交叉则把endi换成end1不影响后续选择。

 

1 #include
2 #include
3 struct section 4 { 5 int id; 6 int begin; 7 int end; 8 int flag;//是否被选中 9 };10 int cmp(const void *a,const void *b);11 int main()12 {13 freopen("act.in","r",stdin);14 freopen("act.out","w",stdout);15 struct section a[1005];16 int n,i,lastEnd;17 int count=0;18 19 scanf("%d",&n);20 for(i=0;i
=lastEnd) 33 {34 count++;35 lastEnd=a[i].end;36 a[i].flag=1;37 }38 }39 /*40 for(i=0;i
end -((struct section *)b)->end;52 if(ans>0) return 1;53 else if(ans<0) return -1;54 else return 0;55 }

 

转载于:https://www.cnblogs.com/huashanqingzhu/p/6728674.html

你可能感兴趣的文章
匿名内部类
查看>>
BZOJ4071: [APIO2015]八邻旁之桥
查看>>
Redis的六种特性 场景
查看>>
mysql 添加[取消]timestamp的自动更新
查看>>
码农的半衰期只有15年?
查看>>
手工释放linux内存
查看>>
2014-5-30 总结
查看>>
【H3 BPM工作流程管理产品小故事】第四篇 子表创建
查看>>
洛谷P1148 拱猪计分
查看>>
扑克序列
查看>>
java笔记--适配器模式的运用
查看>>
Replace Nested Conditional with Guard Clauses(用卫语句代替嵌套循环)
查看>>
jsp中${}是EL表达式的常规表示方式
查看>>
[Web Tools] 实用的Web开发工具
查看>>
ContentProvider
查看>>
欢迎来到Attention的博客
查看>>
获取IOS bundle中的文件
查看>>
document
查看>>
Hadoop下大矩阵乘法Version2
查看>>
iPhone内存溢出——黑白苹果
查看>>