【贪心】POJ - 3069 Saruman's Army
题意
给n个点,从中选择若干个标记,在距离标记为r的范围内包含其他的点,最少需要几个标记,才能将所有的点包含在内
思路
贪心。先排序,从最左边的点开始找到此半径内最大的点,则此点就是第一个标记,以此类推
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <algorithm> 6 using namespace std; 7 const int maxn = 20000 + 5; 8 int n, m, T; 9 int s[maxn]; 10 int main() 11 { 12 13 while(scanf("%d %d", &m, &n) == 2 && m != -1) { 14 for(int i = 0; i < n; i++) { 15 scanf("%d", &s[i]); 16 } 17 sort(s, s+n); 18 int ans = 0; 19 int i = 0; 20 while(i < n) { 21 int t = s[i++] + m; 22 while(i < n && s[i] <= t) { 23 i++; 24 } 25 t = s[i-1] + m; 26 while(i < n && s[i] <= t) { 27 i++; 28 } 29 ans++; 30 } 31 printf("%d\n", ans); 32 } 33 return 0; 34 }

浙公网安备 33010602011771号