算法:二分答案
分析:跟TYVJ上的收入计划基本一样,都是假设一个最小值代入验证,如果成立的话就缩小左区间并搜索左区间,否则在右区间里查找。
program sum;
const
maxn=100;
var
n,m,tot:longint;
a:array [0..maxn] of longint;
procedure init;
var
i:longint;
begin
readln(n,m);
for i:=1 to n do
begin
read(a[i]);
inc(tot,a[i]);{求和,和是最大值,即最差的情况。}
end;
end;
function check(x:longint):boolean;
var
i,ans,k:longint;
begin
ans:=0;
k:=0;
i:=1;
while (i<=n) and (k<m) do
begin
inc(ans,a[i]);
if ans>x then
begin
inc(k);
ans:=0;
dec(i);
end;
inc(i);
end;
if i>n then exit(true) else exit(false);
end;
function find(l,r:longint):longint;
var
mid:longint;
begin
if l=r then exit(l);
mid:=(l+r) shr 1;
if check(mid) then exit(find(l,mid)) else exit(find(mid+1,r));
end;
begin
assign(input,'sum.in'); reset(input);
assign(output,'sum.out'); rewrite(output);
init;
writeln(find(1,tot));
close(input); close(output);
end.
再次强化求最X值的最X值问题百分之九十以上可以用二分答案法来做,并且这样写起来也好写一些。