Description
现在要把M本有顺序的书分给K个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三、第四本数给同一个人抄写。现在请你设计一种方案,使得复制时间最短。复制时间为抄写页数最多的人用去的时间。
Input
第一行两个整数M、K;(K<=M<=100)
第二行M个整数,第i个整数表示第i本书的页数。
Output
共K行,每行两个正整数,第i行表示第i个人抄写的书的起始编号和终止编号。K行的起始编号应该从小到大排列,如果有多解,则尽可能让前面的人少抄写。
Sample Input
9 3
1 2 3 4 5 6 7 8 9
Sample Output
1 5
6 7
8 9
var m,l,j,n,i,k:longint;
s,a:array [0..1000] of longint;
f:array [0..101,0..101] of longint;
function max(a,b:longint):longint;
begin
max:=a;
if a<b then max:=b;
end;
begin
readln(n,k);
fillchar(f,sizeof(f),1);
if k=0 then exit;
for i:=1 to n do
begin
read(a[i]);
s[i]:=s[i-1]+a[i];
f[1,i]:=s[i];
end;
for i:=2 to k do
for j:=i-1 to n do
for l:=1 to n-j do
if max(f[i-1,j],s[j+l]-s[j])<f[i,j+l] then
f[i,j+l]:=max(f[i-1,j],s[j+l]-s[j]);
j:=k;
for i:=n downto 1 do
begin
if m+a[i]<=f[k,n] then m:=m+a[i]
else
begin
s[j]:=i+1;
j:=j-1;
m:=a[i];
end;
end;
s[k+1]:=n+1;
s[1]:=1;
for i:=1 to k do
writeln(s[i],' ',s[i+1]-1);
end.