1 条题解
-
0MartinBI LV 8 @ 2017-10-27 21:12:50
//直接二分答案;
//但是一本通上只有80;
//QAQ;
#include<cstdio>
#include<stdio.h>
using namespace std;
int n,k,z,sum=0,mid;
int l=1;int r;
int coc[100100];//coc的值;inline void work()
{
int cnt=1/*块数*/,tot=0;
for(register int i=1;i<=n;++i)
{
tot+=coc[i];
if(tot>mid)
{
cnt++;
tot=coc[i];
}
}
if(cnt>k)//如果块数大于k,说明二分的值小了;
{
l=mid+1;
}
else// 如果块数<k,说明二分的值大了;
{
r=mid;
}
}int main()
{
scanf("%d%d",&n,&k);
for(register int i=1;i<=n;++i)
{
scanf("%d",&coc[i]);
sum+=coc[i];
}
r=sum;//如果之分2块,那 直接分一半;
while(l<r)
{
mid=(l+r)>>1;
work();
}
printf("%d",r);
return 0;
}
- 1