对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求。
输入样例#1: 5 6 4 2 4 5 1 输出样例#1: 3 说明 对于20%的数据,有N≤10; 对于40%的数据,有N≤1000; 对于100%的数据,有N≤100000,M≤10^9,M大于所有数的最小值,A[i]之和不超过109。 一到很简单的贪心,但是ans一定要先赋值为1.
var n,m:longint; i,j,k,max,ans,next:longint;begin readln(n,m); ans:=1; for i:=1 to n do begin read(k); inc(max,k+next); next:=0; if max>m then begin max:=0; next:=k; inc(ans); end else if max=m then begin max:=0; inc(ans); end; end; writeln(ans);end.新闻热点
疑难解答