码迷,mamicode.com
首页 > 其他好文 > 详细

1803 凌乱的yyy

时间:2016-10-06 14:56:08      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

难度:普及-

题目类型:贪心

提交次数:1

涉及知识:贪心,排序

题目背景

快noip了,yyy很紧张!

题目描述

现在各大oj上有n个比赛,每个比赛的开始、结束的时间点是知道的。

yyy认为,参加越多的比赛,noip就能考的越好(假的)

所以,他想知道他最多能参加几个比赛。

由于yyy是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参加2个及以上的比赛。

输入输出格式

输入格式:

第一行是一个整数n ,接下来n行每行是2个正整数ai,bi(ai<bi),表示比赛开始、结束的时间。

 

输出格式:

一个整数最多参加的比赛数目。

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int n;
 5 struct act{
 6     int start;
 7     int end;
 8 }a[100010];
 9 bool com(act a, act b){
10     return a.end<b.end;
11 }
12 int main(){
13     cin>>n;
14     int i;
15     for(i = 0; i < n; i++)
16         cin>>a[i].start>>a[i].end;
17     sort(a, a+n, com);
18     int ans = 1;
19     int temp = a[0].end;
20     for(i = 0; i < n; i++)
21         if(a[i].start>=temp){
22             ans++;
23             temp = a[i].end;
24         }
25     cout<<ans;
26     return 0;
27 } 

备注:

典型的活动安排类贪心问题,借机复习一下。按照结束时间从早到晚排序,选第一个,然后选不和上一个结束时间冲突的。怎么证明这是最优的呢?我觉得挺谜的。。看到有一个解释似乎有点道理:尽可能为后面腾出更多时间进行选择。。大概可以说服一下自己。注意ans初始化为1,因为第一个要选上。

1803 凌乱的yyy

标签:

原文地址:http://www.cnblogs.com/fangziyuan/p/5933685.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!