二分~
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n,m,i,mi,mid,ma,t,ts,a[110000];
scanf("%d%d",&n,&m);
mi=0;
ma=0;
for (i=0; i<n; i++)
{
scanf("%d",a+i);
ma+=a[i];
if (a[i] > mi)
mi=a[i];
}
while (mi < ma)
{
t=0;
ts=0;
mid=(mi+ma)>>1;
for (i=0; i<n; i++)
{
ts+=a[i];
if (ts > mid)
{
ts=a[i];
t++;
}
}
if (t >= m)
{
mi=mid+1;
}
else if (t < m)
{
ma=mid;
}
}
printf("%d\n",ma);
}
本文介绍了一种使用二分查找算法解决特定问题的C++实现方法。通过输入一组整数和一个目标值,该程序能够有效地找到满足条件的划分点,确保划分后的子集数量不小于指定的目标值。此算法在解决涉及区间搜索的问题中非常实用。

被折叠的 条评论
为什么被折叠?



