贪心 数轴 画线问题

问题描述

三哥无聊的在纸上划着线条,队友不能容忍,于是借机给他出了一个简单的问题,让他把自己画 的n线条选择一部分摆到数轴上,且两两没有重合,然后问他最大的摆放数量k

输入

第一行为一个正整数 n; 在接下来的 n 行中,每行有 2个数 ai,bi描述每条线段。 n, ai, bi(0 < n, ai, bi ≤ 106 )

输出

输出一个整数,为 k的最大值。

输入样例

3

0 2

2 4

1 3

输出样例

2


这是我HPU暑期ACM集训的时候我们学长自己出的题,我们自己的服务器判题,但是当时出了很多BUG

但是总的来说让我们体验了一次区域赛的形式,最后的滚榜还是很刺激的!!!这是个简单的贪心问题 


贪心:

贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

struct stu                     //结构体存下在数轴上线段的起点和终点的位置
{
	int l;
	int r;
}data[1000000+10];

bool cmp(stu x,stu y )         //把这写点的终点按照升序的方法排序;
{
	return x.r<y.r; 
}

int main ()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d%d",&data[i].l,&data[i].r);
	}
	sort(data,data+n,cmp);       //排序
	int jishu= 1;                
	int  right= data[0].r;       //让第一个终点等于我们输入的第0个,也就是第一个
	for(int i = 1;i<n;i++)      
	{ 
		if(data[i].l>=right)     //如果 我们找到了起点的数字大于终点的大小
		{                        //我们的计数器就+1
			jishu++;             // 然后把交换位置 让后面的一个成 r
			right=data[i].r;
		}
	}	printf("%d",jishu);	
return 0;
}





猜你喜欢

转载自blog.csdn.net/qq_42759323/article/details/81167781