1 条题解
-
4
#include<bits/stdc++.h> using namespace std; int n,m,l,r,a[30010]; bool check(int mid) { int s=0,c=0;//s:目前总和,c:分了几组 for(int i=1;i<=n;i++) { s+=a[i];//每次累加 if(s>mid) { c++; s=0; }//若比最小体力和大,更新组数,总和清0 } return c>=m;//组数比m大,可以压缩;比m小,这个最小体力和不成立 } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>a[i]; r+=a[i];//r边界:所有人体力之和(所有人分一组的情况 } while(l<r) { int mid=(l+r+1)/2; if(check(mid))l=mid; else r=mid-1; }//二分模板 cout<<l+1;//本人也不知道为什么要加1 return 0; }
- 1
信息
- ID
- 669
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 112
- 已通过
- 44
- 上传者