9.9 买礼物的艰辛 2719

【9.9 买礼物的艰辛 2719】

  • 题目
  • 题解
  • 代码

题目 小X同学给小C同学选了N件礼物,决定顺序购买并赠送,但作为一个没有工资没有零花钱的可怜小朋友,有M位好心的同学伸出了援助之手,然而为了减少最高的借款量,小X同学希望OI竞赛的你为他合理规划,使得他能轻松快乐地送出礼物。
100%: n<=100000
样例输入
7 5
100
400
300
100
500
101
400
样例输出
500
题解 最大值的最小值,二分啦
注意:顺序购买。如样例,不能买了100然后买101
时间复杂度O(n log n)
代码 这坨跑得快一点
var n,m,i,j,k,l,r,t,mid,ans:longint; a:array[1..100000]of longint; begin readln(n,m); for i:=1 to n do begin readln(a[i]); k:=k+a[i]; end; r:=k; l:=1; while lmid then begin j:=m+1; break; end else begin if t+a[i]>mid then begin t:=0; inc(j); end; t:=t+a[i]; end; if j<=m then r:=mid else l:=mid+1; end; writeln(r); end.

这坨慢一点
var n,m,i,j,k,l,r,mid,ans:longint; a:array[1..100000]of longint; function night(k:longint):boolean; var i,j,l,r,t:longint; begin t:=0; j:=0; for i:=1 to n do if a[i]>k then exit(false) else begin if t+a[i]>k then begin t:=0; inc(j); end; t:=t+a[i]; end; if j>m then exit(false); exit(true); end; begin readln(n,m); for i:=1 to n do begin readln(a[i]); k:=k+a[i]; end; r:=k; l:=1; while l

    推荐阅读