POJ3069 http://poj.org/problem?id=3069
题目大意:
给定一段线段的长度和一些点,求覆盖所有点的最小线段数。
思路:
从小到大贪心覆盖。
参考代码:
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
const int MAX = 2005;
const int enf = 0x3f3f3f;
int pos[MAX];
int R, n;
int ans[MAX];
int main() {
while(cin >> R >> n) {
if(R == -1 && n == -1) return 0;
else {
for (int i = 0; i < n; i++) {
cin >> pos[i];
}
sort(pos, pos + n);
int ans = 0;
int i = 0;
while(i < n) {
int s = pos[i++];
while(i < n && s + R >= pos[i]) i++;
int e = pos[i - 1];
while(i < n && e + R >= pos[i]) i++;
ans++;
}
cout << ans << endl;
}
}
return 0;
}