思路:还是道二分题,这种题一般都是先二分答案,再判断是否可行,然后调整。
var
cnt,l,r,mid,ans,sum,n,m,i:longint;a:array[0..210000]of longint;
begin
readln(n,m);
l:=maxlongint;
for i:=1 to n do
begin
read(a[i]);
if a[i]<l then l:=a[i];
r:=r+a[i];
end;
while l<=r do
begin
mid:=(l+r)shr 1;
sum:=0;cnt:=0;
for i:=1 to n do
begin
if a[i]>mid then begin cnt:=m+1;break;end;
if sum+a[i]>mid then begin cnt:=cnt+1;sum:=a[i];end
else sum:=sum+a[i];
end;
if cnt>=m then l:=mid+1
else begin ans:=mid;r:=mid-1;end;
end;
write(ans);
end.