题目大意:
给N个数,分成M组,每一组最大值的最小值是多少。每一组数必须是连续的。
解题思路:
用二分法来穷举最大值,求最小。是针对最大值的上界和下界二分。
下面是代码:
#include <stdio.h>
int a[100005],n,m;
bool does(int xian)
{
int sum=0,cnt=1;
for(int i=0; i<n; i++)
{
if(sum+a[i]<=xian)
{
sum+=a[i];
}
else
{
cnt++;
sum=a[i];
}
}
if(cnt>m)return false;
return true;
}
int main()
{
int i,high=0,low=0,mid;
scanf("%d%d",&n,&m);
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
high+=a[i];
if(a[i]>low)
{
low=a[i];
}
}
while(low<high)
{
mid=(low+high)>>1;
if(does(mid))
{
high=mid-1;
}
else
{
low=mid+1;
}
}
printf("%d\n",low);
return 0;
}