zoukankan      html  css  js  c++  java
  • poj 3273 Monthly Expence 简单二分

     1 /**
     2 大意: 有连续的n天,每一天有一定的花费,将其分成m份,每一份占一天或者连续的几天,求这m份中的最大值
     3 思路:  二分其最大上限,看在此最大上线,能分成多少份,若大于m份,说明上限过小,需要扩大上限
     4           若小于m份,则说明,下限过大,需要缩小上限。
     5 **/
     6 #include <iostream>
     7 
     8 using namespace std;
     9 int c[100010]; // 记录,每天的花费 
    10 int main()
    11 {
    12     int n,m;
    13     cin>>n>>m;
    14     int maxn =0,sum =0;
    15     for(int i=1;i<=n;i++){
    16         cin>>c[i];
    17         if(c[i]>maxn) maxn = c[i];
    18         sum += c[i];
    19     }
    20 
    21     int mid ,low = maxn,high= sum;
    22     while(high>low){
    23         mid = (high + low )/2;
    24         int cnt = 1,w =0;
    25         for(int i=1;i<=n;i++){
    26             w += c[i];
    27             if(w>mid){
    28                 cnt++;
    29                 w = c[i];
    30             }
    31         }
    32         if(cnt>m) low = mid +1;
    33         else  high = mid -1;
    34     }
    35     cout<<low<<endl;
    36     return 0;
    37 }
  • 相关阅读:
    Activity 生命周期 返回键 退出 杂谈
    多线程基本语法
    常用代码
    JSP 相关
    powerDesiger uml class
    抽象类的说明
    javaScript 中常用的正则表达式
    chickbox 的使用
    对象在内存中的状态
    jQuery 常用代码
  • 原文地址:https://www.cnblogs.com/Bang-cansee/p/3724260.html
Copyright © 2011-2022 走看看