poj3273Monthly Expense

http://poj.org/problem?id=3273

View Code
 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<stdlib.h>
 5 #include<cmath>
 6 using namespace std;
 7 int num[100010],n,m;
 8 int judge(int mid)
 9 {
10     int i,s=0,k=1;
11     for(i = 1 ; i <= n ; i++)
12     {
13         s+=num[i];
14         if(s>mid)
15         {
16             s = num[i];
17             k++;
18         }
19     }
20     if(k>m)
21        return 1;
22     else
23        return 0;
24 }
25 int main()
26 {
27     int i,j;
28     while(cin>>n>>m)
29     {
30         int high=0,low=0;
31         for(i = 1; i <= n ;i++)
32         {
33                 cin>>num[i];
34                 high+=num[i];
35                 if(num[i]>low)
36                     low = num[i];
37         }
38         int mid = (low+high)/2;
39         while(low<high)
40         {
41             if(judge(mid))
42             low = mid+1;
43             else
44             high = mid-1;
45             mid = (low+high)/2;
46         }
47         cout<<mid<<endl;
48     }
49     return 0;
50 }
原文地址:https://www.cnblogs.com/shangyu/p/2934053.html