COGS p917 划分数列
【分析】
即k序列和
可采用二分答案的思想,设出一个答案ans,循环将和不超过ans的几个数分为一部分。直到最后若可以分为k部分则减小上界,反之增加下界。直到确定答案。
1 var 2 n,k,i,p,l,r,m,s:longint; 3 a:array[1..100000] of longint; 4 begin 5 assign(input,'seqa.in'); 6 reset(input); 7 assign(output,'seqa.out'); 8 rewrite(output); 9 readln(n,k); 10 for i:=1 to n do 11 begin 12 read(a[i]); inc(r,a[i]); 13 end; 14 while r-l>1 do begin 15 m:=(l+r) shr 1; 16 s:=0; p:=0; 17 for i:=1 to n do 18 if s+a[i]<=m then s:=s+a[i] 19 else begin inc(p); s:=a[i]; end; 20 if p+1>k then l:=m else r:=m; 21 end; 22 writeln(r); 23 close(input); 24 close(output); 25 end.