解题思路:emmm就是经典的二分答案,但是我有一个案例没通过,不知道哪里有问题,有找到问题的欢迎评论区留言
注意事项:
参考代码:
#include <bits/stdc++.h> using namespace std; int n,m; vector <int>a; bool g(int x){ int cnt=0; int sum=0; for(int i=0;i<a.size();i++){ if(sum+a[i]>x){ sum=a[i];//分出一组 cnt++; } else { sum+=a[i]; } } cnt++;//剩下和没有超过x,但是要分到一组去,不然会少 return cnt<=m; } int main(){ cin>>n>>m; int sum=0; int k; for(int i=0;i<n;i++){ cin>>k; a.push_back(k); sum+=a[i]; } int l=0,r=sum; while(l<=r){ int mid=(l+r)>>1; if(g(mid)){//mid大了 r=mid-1; } else l=mid+1; } cout<<l; return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:1058 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:711 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:862 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:884 |
1124题解浏览:595 |
简单的a+b (C语言代码)浏览:531 |
C语言训练-亲密数 (C语言描述,反正怎么都能对)浏览:2169 |
Tom数 (C语言代码)浏览:555 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:772 |
A+B for Input-Output Practice (I) (C语言代码)浏览:574 |