POJ3069-贪心水

Question:

本体摘自《挑战程序设计2.2.4》,详情见书
求最少的标记点覆盖所有的点

Solution:

我们这里采用的贪心思路是每次从起点开始贪半径,找到我们的原点之后,在贪右边,找到下一次的起点

Code:

#include"iostream"
#include"cstdio"
#include"cstring"
#include"cstdlib"
#include"algorithm"
#define N 1005 

using namespace std;

int r,n;
int data[N];

int main()
{
	while(scanf("%d%d",&r,&n)&&(r+n)!=-2)
	{
		int sum=0;
		for(int i=1;i<=n;i++) cin>>data[i];
		sort(data+1,data+1+n);
		int s=1;  //起点
		while(s<=n)
		{
			int i;
			int flag;
			for(i=s;i<=n;i++)
			{
				if(data[s]+r>=data[i]);
				else 
				{
					flag=i-1;
					break;
				}
			}
			sum++;
			if(i==n+1) break; 
			for(i=flag;i<=n;i++)
			{
				if(data[flag]+r


你可能感兴趣的:(ACMer's,collection,书斋课斋,读书笔记,POJ,专项题解)