当前位置:首页 > 题解目录 > 正文内容

【题解】月度开销

亿万年的星光4年前 (2022-03-26)题解目录20607

【题目描述】

农夫约翰是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算出并记录下了接下来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

【题目分析】

  • 题目描述的过于复杂,实际上就是二分,N是天数,M是要分成的财政周期。

  • 区别:月度开销的值应该在 每天开销最大值 和 每天开销的总和 之间,通过二分法不断逼近。judge函数判断按照mid开销所分的周期,如果周期大于给定周期M,则可以增加开销,反之,减小开销。


【参考代码】

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#define INF 999999999
#define N 1000001
#define MOD 1000000007
#define E 1e-3
using namespace std;
int n,m,a[N];
int judge(int x)
{
    int money=0,month=0,d,i;
    for(i=1;i<=n;i++)
    {
        money+=a[i];
        if(money>=x)
        {
            month++;
            if(a[i]<x)
                money=a[i];
            else
                return 1;
        }
    }
    return month>=m;
}
int main()
{
    int left,right,mid;
    int tot=0;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        tot+=a[i];
    }
    left=1;
    right=tot;
    while(left+1<right)
    {
        mid=(left+right)/2;
        if(judge(mid))
            left=mid;
        else
            right=mid;
    }
    if(judge(left))
        cout<<left<<endl;
    else
        cout<<right<<endl;
    return 0;
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    【题解】统计自然数

    【题目描述】某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出...

    【题解】BFS、DFS——走迷宫问题

    【题目描述】给定一个 n×m的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,...

    合影效果

    【题目描述】小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他...

    【题解】公路乘车(动态规划)

    【题目描述】一个特别的单行街道在每公里处有一个汽车站。顾客根据他们乘坐汽车的公里使来付费。例如下表就是一个费用的单子。   没有一辆车子行驶超过10公里,一个顾客打算行驶n公里(1<...

    【题解】Power Strings

    【题目描述】给定若干个长度 ≤106 的字符串,询问每个字符串最多是由多少个相同的子字符串重复连接而成的。如:ababab 则最多有 3 个 ab 连接而成。【输入描述】输入若干行,每行有一...

    【题解】宴会

    【题目描述】今人不见古时月,今月曾经照古人。梦回长安,大唐风华,十里长安花,一日看尽。 唐长安城是当时世界上规模最大、建筑最宏伟、规划布局最为规范化的一座都城。其营建 制度规划布局的特点是规...