首页 > 代码库 > 1803 凌乱的yyy
1803 凌乱的yyy
难度:普及-
题目类型:贪心
提交次数: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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。