51 nod 1133 二级算法题 贪心
2017-08-09 16:17
183 查看
题目
思路:排序按照起点的从小到大排,终点的从小到大排序。
和51 node 一级区间贪心是一样的思路,在这个一级里面,我们其实是更新的是尽量“长”的,那么在这个二级的题目里面,我们要更新的是尽量“短”的,这样子,就有更多的空间来给别的线段,也就是重叠的可能性会小。
AC代码:
思路:排序按照起点的从小到大排,终点的从小到大排序。
和51 node 一级区间贪心是一样的思路,在这个一级里面,我们其实是更新的是尽量“长”的,那么在这个二级的题目里面,我们要更新的是尽量“短”的,这样子,就有更多的空间来给别的线段,也就是重叠的可能性会小。
AC代码:
#include <iostream> #include <algorithm> #include <cstring> #define max(x,y) ((x)>(y)?(x):(y)) using namespace std; struct stu{ int s,e; }a[10010]; int cmp(stu x,stu y){ if(x.s==y.s) return x.e<y.e; else return x.s<y.s; } int main() { int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i].s>>a[i].e; sort(a,a+n,cmp); stu temp=a[0]; int ans=1; for(int i=1;i<n;i++){ if(a[i].s>=temp.e){//不重叠的线段多了一个a[i] ans++; temp=a[i]; } else if(temp.e>a[i].e){//a[i]区间比temp小,所以换掉用来比较的区间,但是不会使ans++,因为我们temp的终点大,我们实际上丢掉了他。 temp=a[i]; } else if(temp.e<=a[i].e){//temp终点小一点,所以我们保留temp,不要这个a[i]. continue; } } cout<<ans<<endl; return 0; }
相关文章推荐
- 51nod 1133 不重叠的线段
- 51 nod 1099 任务执行顺序(贪心)
- 51 nod 砝码称重(贪心+进制转换思想)
- 51Nod——1295 XOR key(贪心+可持久化字典树)
- 51 nod 1385 凑数字(贪心+构造)
- 51 nod 1672 区间交(枚举 贪心)
- 51 nod 算法马拉松28 先序遍历与后序遍历
- [51Nod](1091) 线段的重叠 ---- 贪心
- 51 nod 1125 交换机器的最小代价(强连通分量+贪心)
- 【贪心构造】51Nod 1385 凑数字
- 51 nod 1804 小C的多边形(贪心)
- 51 nod 1117 聪明的木匠 (贪心)
- 51 nod 1378 夹克老爷的愤怒 树形dp + 贪心
- 51 nod 一级算法题 1344 走格子
- 51 nod 1625 夹克爷发红包【贪心、二进制枚举】
- 数塔取数问题 --51Nod 1级算法
- [贪心+单调队列+ST算法]51 nod 1288 ——汽油补给
- 51 nod 1574 排列转换(思维 贪心)
- 51 nod 最高奖励(贪心+优先队列)
- 【51nod 1785】数据流中的算法