1. 程式人生 > >【貪心】區間覆蓋問題

【貪心】區間覆蓋問題

區間覆蓋問題
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss
Problem Description

設x1 , x2 ,…… , xn 是實直線上的n 個點。用固定長度的閉區間覆蓋這n 個點,至少需要多少個這樣的固定長度閉區間?
對於給定的實直線上的n個點和閉區間的長度k,設計解此問題的有效演算法,計算覆蓋點集的最少區間數,並證明演算法的正確性。
Input

輸入資料的第一行有2 個正整數n和k(n≤10000,k≤100),表示有n個點,且固定長度閉區間的長度為k。接下來的1 行中,有n個整數,表示n個點在實直線上的座標(可能相同)。
Output

輸出一個整數,表示計算出的最少區間數輸出。
Example Input

7 3
1 2 3 4 5 -2 6
Example Output

3

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
   int n,k;
   cin>>n>>k;
   int* a=new int[n];
   for(int i=0;i<n;i++)
   {
       cin>>a[i];
   }
   sort(a,a+n);
   int
mark=a[0]; int num=1; for(int j=1;j<n;j++) { if(a[j]>mark+k) { mark=a[j]; num++; } } cout<<num<<endl; return 0; }