本文地址:http://www.javashuo.com/article/p-opvxmqnn-dw.htmlhtml
题目名称:Saruman's Armyide
连接:http://poj.org/problem?id=3069spa
题意:在军队直线上有 n 个点,记为 xi,每一个点的影响范围距离为 R ,计算最少须要多少点才能覆盖全部的点code
思路:从最左边的点开始考虑,选取在距离 R 之内最远的点,这样就能保证左边的点能覆盖到,并且贪心策略使得点能够最少。剩下的也能够按照一样的方法。对于选取的点距离为 R 以外的第一个点进行相同处理。htm
代码以下:blog
1 #include<cstdio>
2 #include<algorithm>
3 using namespace std; 4 int a[1005]; 5 int main() { 6 int R,n; 7 while(scanf("%d%d", &R, &n) != EOF) { 8 if(R == -1 && n == -1) 9 break; 10 for(int i = 0; i < n; i++) 11 scanf("%d", &a[i]); 12 sort(a,a + n); 13 int sum = 0, i = 0; 14 while(i < n) { 15 int left = a[i++]; 16 while(i < n && a[i] <= left + R) ++i; 17 int middle = a[i - 1]; 18 while(i < n && a[i] <= middle + R) ++i; 19 sum++; 20 } 21 printf("%d\n", sum); 22 } 23 return 0; 24 }