直接上中文

Descriptions

给你一个长度为N的序列,现在要让你把他们切割成M份(所以每一份都是连续的),然后每一份都有一个和sum[i],其中最大的一个是maxSum = max(sum[i]),问这个最大值最小是多少?

输入

多组输入输出
每组数据第一行是2个整数N,M(1<=M<=N<=100000),接着是N行,每行一个整数vi,表示这个序列.


输出

每组数据输出一行一个数,为这个最大值最小是多少


输入样例

7 5
100
400
300
100
500
101
400


输出样例

500


样例解释

对于样例,你可以把100,400分成第一组,300,100分成第二组,500分成第三组,101分成第四组,400分成第五组,他们的和最大的是500。

题目链接

https://vjudge.net/problem/POJ-3273

 

一开始上届是n个数的和。代表只分一组。

下届是n个数中最大的数。代表分n组;

如果结果是mid=(上届+下届)/2;那么根据mid看看能分多少组。组数大于m,代表mid比实际值小。下届变成mid+1。否则,上届变成mid-1;

 

AC代码

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <fstream>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <deque>
  7. #include <vector>
  8. #include <queue>
  9. #include <string>
  10. #include <cstring>
  11. #include <map>
  12. #include <stack>
  13. #include <set>
  14. #include <sstream>
  15. #define IOS ios_base::sync_with_stdio(0); cin.tie(0);
  16. #define Mod 1000000007
  17. #define eps 1e-6
  18. #define ll long long
  19. #define INF 0x3f3f3f3f
  20. #define MEM(x,y) memset(x,y,sizeof(x))
  21. #define Maxn 100000+5
  22. using namespace std;
  23. int N,M;
  24. int l,r,mid;//左右中
  25. int a[Maxn];//序列
  26. int solve()
  27. {
  28. mid=(l+r)/2;//预判的最大值
  29. int sum=0;//当前这份的和
  30. int cnt=1;//有cnt份
  31. for(int i=0; i<N; i++)
  32. {
  33. if(sum+a[i]<=mid)//当前这份的和不能大于预判的最大值
  34. sum+=a[i];
  35. else
  36. {
  37. sum=a[i];
  38. cnt++;
  39. }
  40. if(cnt>M)//所得份数大于题目要求的份数,即预判和小了
  41. return 0;
  42. }
  43. return 1;//所得份数小于等于题目要求的份数,即预判和大了
  44. }
  45. int main()
  46. {
  47. while(cin>>N>>M)
  48. {
  49. l=r=0;//初始化
  50. for(int i=0; i<N; i++)
  51. {
  52. cin>>a[i];
  53. l=max(l,a[i]);
  54. r+=a[i];
  55. }
  56. while(l<=r)
  57. {
  58. if(!solve())//预判和小了,整个取值区间要变大,即左区间向右移动
  59. l=mid+1;
  60. else//预判和大了,整个取值区间要变小,即右区间向左移动
  61. r=mid-1;
  62. }
  63. cout<<mid<<endl;
  64. }
  65. }

 

posted on 2019-08-04 18:38 Sky丨Star 阅读() 评论() 编辑 收藏

版权声明:本文为sky-stars原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sky-stars/p/11299196.html