python最小值最大化和最大值最小化_OJ 21658::Monthly Expense(二分搜索+最小化最大值)...

Description

Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的。他已经计算了他以后N(1<=N<=100,000)个工作日中每一天的花费moneyi(1<=moneyi<=10,000),他想要为他连续的M(1<=M<=N)个被叫做“清算月”的结帐时期做一个预算,每一个“清算月”包含一个工作日或更多连续的工作日,每一个工作日都仅被包含在一个“清算月”当中。 FJ的目标是安排这些“清算月”,使得每个清算月的花费中最大的那个花费达到最小,从而来决定他的月度支出限制。

Input

第一行:两个用空格隔开的整数:N和M

第2..N+1行:第i+1行包含FJ在他的第i个工作日的花费

Output

第一行:能够维持每个月农场正常运转的钱数

题解:

M<=N,如果分成

最大值最小,考虑二分。

二分一个ans。

然后模拟一下每一天尽量把钱用完,

得到一个需要的清算月数目cnt。

若cnt<=M合法,否则不合法。

思路:我们可以直到这个值必然在所有数中最大值与所有数的总和之间,那么只要再这个区间进行二分即可

AC 代码:这是一个可能超时的代码

#include

#include

using namespace std;

int n,m;

int a[];

bool mmp(int mid)

{

int sum=;

int ans=;

for(int i=;i<=n;i++)

{

if(sum+a[i]<=mid)

sum+=a[i];

else

{

sum=a[i];

ans++;

}

}

if(ans > m)

return ;

return ;

}

int main()

{

int tail,head,mid;

while(scanf("%d%d",&n,&m)!=EOF)

{

tail=,head=;

for(int i=;i<=n;i++)

{

scanf("%d",&a[i]);

tail+=a[i];

head=max(head,a[i]);

}

mid=(head+tail)/;

while(tail>=head)

{

if(mmp(mid)==)

head=mid+;

else

tail=mid-;

mid=(head+tail)/;

}

printf("%d\n",mid+);

}

}

下面这是进行了一些剪支

#include

#include

#define maxn 100005

using namespace std;

int cost[maxn];

int n,m;

bool judge(int x)

{ //用来判断按当前二分值作为题目要求的最大值,所分出的堆是否合理。
{

int s=,t=;

for (int i=;i

{

if (cost[i]>x) return false;///高妙之处剪枝

if (s+cost[i]>x)

{

if (t>=m-) return false;///剪枝

t++;

s=cost[i];

}

else

s+=cost[i];

}

return true;

}

int binary(int maxx,int sum) //二分部分

{

int mid,left=maxx,right=sum;

while (left

{

mid=left+(right-left)/;

if (!judge(mid)) left=mid+;

else

right=mid;

}

return left;

}

int main()

{

int maxx=;//二分的下界

int sum=;//二分的上界

scanf("%d%d",&n,&m);

for (int i=;i

{

scanf("%d",&cost[i]);

maxx=max(maxx,cost[i]);

sum+=cost[i];

}

printf("%d\n",binary(maxx,sum));

return ;

}

题后感:好好学习下什么是最小化最大值与最大化最小值吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误信息说明你的程序在运行时无法找到名为libctemplate.so.3的共享库文件,因此无法加载该库文件。可能的原因是该库文件未被正确安装或未被正确配置。 解决这个问题的方法是确保libctemplate.so.3库文件已经正确安装,并且在程序运行时可以被找到。你可以尝试以下几个步骤来解决这个问题: 1. 首先,确认libctemplate.so.3库文件是否存在于你的系统中。你可以使用命令`find / -name libctemplate.so.3`来查找该文件。如果该文件不存在,那么你需要安装该库文件。 2. 如果库文件存在于系统中,但是程序仍然无法找到它,那么可能是因为库文件的路径没有正确配置。你可以通过设置LD_LIBRARY_PATH环境变量来指定库文件的搜索路径。例如,可以使用命令`export LD_LIBRARY_PATH=/path/to/libctemplate.so.3:$LD_LIBRARY_PATH`来添加库文件所在的路径到LD_LIBRARY_PATH环境变量中。 3. 如果以上方法都没有解决问题,你还可以尝试重新安装libctemplate.so.3库文件。确保使用正确的版本,并按照正确的安装步骤进行操作。 综上所述,你可以通过确认库文件是否存在、配置LD_LIBRARY_PATH环境变量或重新安装库文件来解决"./oj_server: error while loading shared libraries: libctemplate.so.3: cannot open shared object file: No such file or directory"的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【Linunx报错】程序在运行时无法找到一个名为 “libctemplate.so.3“ 的共享库文件](https://blog.csdn.net/weixin_47952981/article/details/130167084)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值