http://codevs.cn/problem/3135/
二分法+DP(可能是)
二分法找出可能是结果的值,循环判断是不是那个值。
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<string.h>
#include<map>
#include<queue>
#include<algorithm>
using namespace std;
int a[50005]={0};
int length,n,m;
bool erfenfa(int temp)
{
int jishuqi=0;
int i=0;
for (int j = 1; j <= n+1; ++j)
{
if (a[j]-a[i]<=temp)
{
/* code */
jishuqi++;
}else
{
i=j;
}
}
if (jishuqi<=m)
{
/* code */
return true;
}else
{
return false;
}
}
int main()
{
cin>>length>>n>>m;
for (int i = 1; i <= n; ++i)
{
cin>>a[i];
}
sort(a+1,a+n+1);
a[n+1]=length;
int l=1;
int r=1000000000;
while(l!=r)
{
int mid=(l+r)/2;
if (erfenfa(mid))
{
/* code */
l=mid+1;
}else
{
r=mid;
}
}
cout<<l<<endl;
return 0;
}