二分答案——划分数列

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.
参考程序

 

转载于:https://www.cnblogs.com/vacation/p/5413659.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值