贪心:贪心法之主持人的烦恼
问题:
思路:
若要达到组数最大,则对每个元素,应选择最有可能与其组成一组的元素与其组合。对输入排序,从数组的第一个元素起,最有可能与其组成一组的元素即为其后继元素(因为其后继元素的值与其的差值是所有选择中最小的),选择满足约束的后继元素与其组成一组为当前步骤中所有可行选择中最佳的局部选择。若其后继元素满足条件,计数器加1,指针加2,若其后继元素与其的差>=m,则在其以后的元素更不可能与其组成一组,则跳过该元素,指针加1。
代码:
#include<iostream>
#include<algorithm>
using namespace std;
long long array[100001]={0};
int main()
{
long long n,m,i,count;
while( cin>>n>>m )
{
count=0;
for( i=0;i<n;i++ )
scanf( "%lld",&array[i] );
sort( array,array+n );
for( i=0;i<n-1;i++ )
if( array[i+1]-array[i]<m )
{
count++;
i++;
}
printf( "%lld\n",count );
}
}