码迷,mamicode.com
首页 > 其他好文 > 详细

POJ3273 Monthly Expense

时间:2016-08-13 19:43:34      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

 

  查看原题

  边界,就是边界和思维,怎么有效的判断中间值是大了还是小了,以及准确的找到边界!一个<写成<=就前功尽弃,还特别难找到错误!

技术分享
 1 #include <cstdio>
 2 #include <algorithm>
 3 const int maxN = 100005;
 4 int N, M;
 5 int A[maxN];
 6 using namespace std;
 7 int main(void) {
 8     while (2 == scanf("%d%d", &N, &M)) {
 9         int u = 0, l = 0, m, sum, cnt, i;
10         for (int i = 0; i < N; i++) {
11             scanf("%d", &A[i]);
12             u += A[i];
13             l = max(l, A[i]);
14         }
15         while (u > l) {
16             m = (l+u)>>1;
17             sum = cnt = 0;
18             for (i = 0; i < N; i++) {
19                 sum += A[i];
20                 if (sum > m) {
21                     cnt++;
22                     sum = A[i];
23                 }
24             }
25             if (cnt < M) u = m;
26             else l = m+1;
27         }
28         printf("%d\n", l);
29     }
30 }
View Code

 

POJ3273 Monthly Expense

标签:

原文地址:http://www.cnblogs.com/zhaoyu1995/p/5768506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!