1751区间覆盖问题(贪心)

Description

设x1 , x2 ,…… , xn 是实直线上的n 个点。用固定长度的闭区间覆盖这n 个点,至少需要多少个这样的固定长度闭区间?
对于给定的实直线上的n个点和闭区间的长度k,设计解此问题的有效算法,计算覆盖点集的最少区间数,并证明算法的正确性。

Input

输入数据的第一行有2 个正整数n和k(n≤10000,k≤100),表示有n个点,且固定长度闭区间的长度为k。接下来的1 行中,有n个整数,表示n个点在实直线上的坐标(可能相同)。

Output

输出一个整数,表示计算出的最少区间数输出。

Sample

Input 

7 3
1 2 3 4 5 -2 6

Output 

3
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <string.h>
 4 #include <vector>
 5 #include <queue>
 6 
 7 #define inf 0x3f3f3f3f
 8 
 9 using namespace std;
10 
11 int main()
12 {
13     int n, k, i, cur, num;
14     int a[10005];
15     cin >> n >> k;
16     for(i=0;i<n;i++)
17     {
18         cin >> a[i];
19     }
20     sort(a, a+n);
21     cur = a[0] + k;
22     num = 1;
23     for(i=1;i<n;i++)
24     {
25         if(a[i]>cur)
26         {
27             cur = a[i]+k;
28             num++;
29         }
30     }
31     cout << num << endl;
32     return 0;
33 }
原文地址:https://www.cnblogs.com/0xiaoyu/p/14096445.html