书的复制

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值