zoukankan      html  css  js  c++  java
  • 二分搜索 POJ 3273 Monthly Expense

    题目传送门

     1 /*
     2     题意:分成m个集合,使最大的集合值(求和)最小
     3     二分搜索:二分集合大小,判断能否有m个集合。
     4 */
     5 #include <cstdio>
     6 #include <algorithm>
     7 #include <cstring>
     8 #include <cmath>
     9 using namespace std;
    10 
    11 const int MAXN = 1e5 + 10;
    12 const int INF = 0x3f3f3f3f;
    13 int a[MAXN];
    14 int n, m;
    15 
    16 bool check(int tot) {
    17     int j = 1, sum = 0;
    18     for (int i=1; i<=m; ++i)    {
    19         sum = 0;
    20         while (j <= n && sum + a[j] <= tot)    {
    21             sum += a[j++];
    22         }
    23         if (j == n + 1) return true;
    24     }
    25     return false;
    26 }
    27 
    28 int main(void)  {       //POJ 3273 Monthly Expense
    29     //freopen ("POJ_3273.in", "r", stdin);
    30 
    31     while (scanf ("%d%d", &n, &m) == 2) {
    32         int l = 0, r = 0;
    33         for (int i=1; i<=n; ++i)    {
    34             scanf ("%d", &a[i]);
    35             if (l < a[i])   l = a[i];
    36             r += a[i];
    37         }
    38 
    39         while (l < r)   {
    40             int mid = (l + r) >> 1;
    41             if (check (mid))    r = mid;
    42             else    l = mid + 1;
    43         }
    44         printf ("%d
    ", l);
    45     }
    46 
    47     return 0;
    48 }
    编译人生,运行世界!
  • 相关阅读:
    晨考总结第二天
    晨考总结第一天
    常用的设计模式总结
    AOP底层原理剖析
    Spring AOP
    jstat统计输出说明
    zabbix 触发器匹配字符串告警
    hive部分常用函数
    nginx日志说明
    windwos文件句柄数限制
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4676376.html
Copyright © 2011-2022 走看看