题目描述:
Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the coasting, can only cover d distance, so an island in the sea can be covered by a radius installation, if the distance between them is at most d.
We use Cartesian coordinate system, defining the coasting is the x-axis. The sea side is above x-axis, and the land side below. Given the position of each island in the sea, and given the distance of the coverage of the radar installation, your task is to write a program to find the minimal number of radar installations to cover all the islands. Note that the position of an island is represented by its x-y coordinates.
Figure A Sample Input of Radar Installations
Input
The input consists of several test cases. The first line of each case contains two integers n (1<=n<=1000) and d, where n is the number of islands in the sea and d is the distance of coverage of the radar installation. This is followed by n lines each containing two integers representing the coordinate of the position of each island. Then a blank line follows to separate the cases.
The input is terminated by a line containing pair of zeros
Output
For each test case output one line consisting of the test case number followed by the minimal number of radar installations needed. “-1” installation means no solution for that case.
Sample Input
3 2
1 2
-3 1
2 1
1 2
0 2
0 0
Sample Output
Case 1: 2
Case 2: 1
code:
#include<cstdio>
#include<algorithm>
#define maxn 25002
using namespace std;
struct cow
{
int beginn;
int endn;
bool operator <(const cow&a)const
{
return beginn < a.beginn;
}
};
cow time[maxn];
int n, t, n1 = 0, t1 = 1;
void turn(int a, int b)
{
int i;
for(i = 1; i < n; i++)
{
if(time[i].beginn <= t1 + 1)
{
if(time[i].endn > b)
b = time[i].endn;
}
else break;
}
if(b > t1)t1 = b;
n1 = i;
}
int main()
{
while(~scanf("%d%d", &n, &t))
{
int num = 0;
n1 = 0, t1 = 0;
for(int i = 0;)
}
}
小结:
贪心算法的思路是寻找局部最优解,以此来达到整体最优解,但并不一定总能得到最优解,这种找区间的问题算是其中一类可以用贪心算法来计算的问题。同时,贪心算法总和dp进行比较,dp的思路是将一个大的问题化解为一个小的同类问题,有点类似递归的思路,但不同的是它将每一步小问题的结果记录下来,不用重复计算,牺牲空间来得到时间效率。一些dp的问题可以用贪心算法来更快求解。