inlineboolcheck(int mid){
int sum=0,all=0;//mid:二分的答案,sum:分的组数,all:当前组的总长for(int i=1;i<=n;i++){
if(a[i]>mid)returnfalse;//有一段大于mid显然不合理if(all+a[i]>mid)
all=a[i],sum++;else all+=a[i];}return(sum<=m);//判断需要分的最小组数<=m}
对于第二问我们可以用 D P DP DP来解决。首先我们会显而易见的想到 f i , j f_{i,j} fi,j表示到第 i i i根木棒,分成 j j j组的方案数。然后就是直接 n 3 n^3 n3做: f i , j = ∑ k = 1 i − 1 f k , j − 1 [ s u m ( i ) − s u m ( k ) ≤ x ] f_{i,j}=\sum_{k=1}^{i-1} f_{k,j-1}[sum(i)-sum(k)\leq x] fi,j=∑k=1i−1fk,