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 }
  • 相关阅读:
    OpenCV 2.4.9
    开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
    吐槽一下CSDN的封停审查机制
    【课程分享】Oracle数据库系统project师
    Html的空格显示
    iOS UIWebView 访问https 绕过证书验证的方法
    Java实现 蓝桥杯VIP 算法训练 整除问题
    Java实现 蓝桥杯VIP 算法训练 数位分离
    Java实现 蓝桥杯VIP 算法训练 薪水计算
    Java实现 蓝桥杯VIP 算法训练 完数
  • 原文地址:https://www.cnblogs.com/zzyh/p/6635560.html
Copyright © 2011-2022 走看看