poj3069

本文地址: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 }
View Code
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息