51nod 1128 正整數分組 V2

2021-08-09 06:27:46 字數 1240 閱讀 3332

給出乙個長度為n的正整數陣列,不改變陣列元素的順序,將這n個數分為k組。各組中元素的和分別為s1,s2….sk。如何分組,使得s1至sk中的最大值最小?

例如:1 2 3 4 5 6分為3組, ,元素和為6, 9, 6,最大值為9。也可以分為 。元素和為:10 5 6,最大值為10。因此第一種方案更優。並且第一種方案的最大值是所有方案中最小的。輸出這個最小的最大值。

第1行:2個數n, k,中間用空格分隔,n為陣列的長度,k為要分為多少組。(2 <= k < n <= 50000)

第2 - n + 1行:陣列元素(1 <= a[i] <= 10^9)

輸出這個最小的最大值。

input

6 3

1 2

3 4 5 6

output

二分加貪心。

二分答案,l=0;r=∑a[i];

很好理解啦quq

p黨瑟瑟發抖。

n,k,ans,l,r,mid,t:int64;

a:array[0..500005] of longint;

function

check

(mid:int64):boolean;

var i:longint;

num,t:int64;

begin

num:=1;t:=0;

for i:=1

to n do

if t+a[i]>mid then

begin inc(num); t:=a[i]; end

else t:=t+a[i];

exit(num<=k);

end;

begin

readln(n,k);

for i:=1

to n do

begin

readln(a[i]);

t:=t+a[i];

end;

l:=0;r:=t;

while l<=r do

begin

mid:=(l+r) div

2; if check(mid) then

begin ans:=mid; r:=mid-1; end

else l:=mid+1;

end;

writeln(ans);

end.

51nod 1128 正整數分組

1128 正整數分組 v2 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 給出乙個長度為n的正整數陣列,不改變陣列元素的順序,將這n個數分為k組。各組中元素的和分別為s1,s2.sk。如何分組,使得s1至sk中的最大值最小?例如 1 2 3 4 5 6分為3組,...

51nod 1128 正整數分組 V2

給出乙個長度為n的正整數陣列,不改變陣列元素的順序,將這n個數分為k組。各組中元素的和分別為s1,s2.sk。如何分組,使得s1至sk中的最大值最小?例如 1 2 3 4 5 6分為3組,元素和為6,9,6,最大值為9。也可以分為 元素和為 10 5 6,最大值為10。因此第一種方案更優。並且第一種...

51nod 1128 正整數分組 V2(二分)

給出乙個長度為n的正整數陣列,不改變陣列元素的順序,將這n個數分為k組。各組中元素的和分別為s1,s2.sk。如何分組,使得s1至sk中的最大值最小?例如 1 2 3 4 5 6分為3組,元素和為6,9,6,最大值為9。也可以分為 元素和為 10 5 6,最大值為10。因此第一種方案更優。並且第一種...