zoukankan      html  css  js  c++  java
  • 月度开销(二分答案)

    06:月度开销

    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    农夫约翰是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算出并记录下了接下来 N (1 ≤ N ≤ 100,000) 天里每天需要的开销。

    约翰打算为连续的M (1 ≤ M ≤ N) 个财政周期创建预算案,他把一个财政周期命名为fajo月。每个fajo月包含一天或连续的多天,每天被恰好包含在一个fajo月里。

    约翰的目标是合理安排每个fajo月包含的天数,使得开销最多的fajo月的开销尽可能少。

    输入
    第一行包含两个整数N,M,用单个空格隔开。
    接下来N行,每行包含一个1到10000之间的整数,按顺序给出接下来N天里每天的开销。
    输出
    一个整数,即最大月度开销的最小值。
    样例输入
    7 5
    100
    400
    300
    100
    500
    101
    400
    样例输出
    500
    提示
    若约翰将前两天作为一个月,第三、四两天作为一个月,最后三天每天作为一个月,则最大月度开销为500。其他任何分配方案都会比这个值更大。
    /*二分答案典型问法,最大中最小,首先确定二分范围,左端点是n天中的最大值(因为题目中说是最大月度),右端点是全部总和(可以极限的想他们全在一个月份里)
    */
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<algorithm>
     5 using namespace std;
     6 int n,m,a[100009],maxx=0,tot,ans;
     7 bool check(int);
     8 int main()
     9 {
    10     scanf("%d%d",&n,&m);//输入n天,m个财政周期 
    11     for(int i=1;i<=n;i++)
    12     {
    13         scanf("%d",&a[i]);
    14         tot+=a[i];//二分的右端点是总的开销 
    15         if(a[i]>maxx)maxx=a[i];//二分的左端点是n天中最大的开销 
    16     }
    17     int l=maxx,r=tot,mid;
    18     while(l<=r)//二分查找 
    19     {
    20         mid=(l+r)>>1;
    21         if(check(mid))//如果中间值可以 
    22         {
    23             ans=mid;//记录答案 
    24             r=mid-1;//缩小范围 
    25         }
    26         else
    27         l=mid+1;//否则扩大范围 
    28     
    29     }
    30     printf("%d",ans);//输出最小值 
    31 }
    32 bool check(int x)//当最小值是x时是否可以 
    33 {
    34     int sum=0,yfen=1;
    35     for(int i=1;i<=n;i++)
    36     {
    37         if(sum+a[i]>x)//sum是一直累加,当超过x时月份++,说明这一天自己另一个月份 
    38         {
    39             sum=a[i];
    40             yfen++;
    41         }
    42         else
    43         sum+=a[i];
    44    }
    45    if(yfen<=m)return 1;//月份等于m时正好分成m个月份,小于m时,可以将某些月份中的天数拆开组成新月份,满足分成m个月份 
    46    else
    47    return 0;
    48 }
  • 相关阅读:
    Binary Search Tree Iterator 解答
    Invert Binary Tree 解答
    Min Stack 解答
    Trapping Raining Water 解答
    Candy 解答
    Jump Game II 解答
    Implement Hash Map Using Primitive Types
    Gas Station 解答
    Bucket Sort
    HashMap 专题
  • 原文地址:https://www.cnblogs.com/zzyh/p/6635560.html
Copyright © 2011-2022 走看看