关闭

月度开销

120人阅读 评论(0) 收藏 举报
分类:

月度开销

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

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

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

note:当我们不确定答案是l或者r或者mid,可以通过if语句在输出的时候判断一下

#include<stdio.h>
#include<iostream>
using namespace std;
int n,m;
int a[1000010];
int C(int val)
{
int temp=0;
int num=1;
for(int i=1;i<=n;i++)
{
if(a[i]>val)return 0;
if(temp+a[i]<=val)
{
temp+=a[i];
}
else
{
temp=a[i];
num++;
}
}
if(num<=m)return 1;
else return 0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
scanf("%d",a+i);
}
int l=0;
int r=1e9+1;
int mid=0;
while(r-l>1)
{
mid=(l+r)/2;
if(C(mid))r=mid;
else l=mid;
}
if(C(r))cout<<r<<endl;
else cout<<mid<<endl;
return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2694次
    • 积分:303
    • 等级:
    • 排名:千里之外
    • 原创:29篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档