专栏文章

洛谷P11510 [ROIR 2017 Day 2] 自动管理系统

P11510题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqky261
此快照首次捕获于
2025/12/04 06:29
3 个月前
此快照最后确认于
2025/12/04 06:29
3 个月前
查看原文

洛谷P11510 [ROIR 2017 Day 2] 自动管理系统题解

题目简要概述:

有若干包裹重量为 11kk,将一些包裹装进包裹袋中,若包裹袋重量 x\geq x,那么会将这一个包裹袋放进一个集装箱,若集装箱里面的所有包裹袋重量之和 y\geq y 则可配送。问:当集装箱可以配送时,最小重量是多少?

分析:

对于每个包裹袋被放进集装箱的可能性为 xxx+k1x + k - 1,若每个包裹袋的重量都以最大的可能性被装进集装箱,且集装箱的重量要最小,那么最大的情况就一定要最小,所以当每个包裹袋都以最大的重量放进集装箱时,只要重量 y\geq y 就没有必要再放进其他的包裹袋,这个重量就是它的上限 RR。即:

s=y÷(x+k1)s = \lceil y \div (x + k - 1) \rceil
R=s×(x+k1)R = s \times (x + k - 1)

那如何确定它的下限呢?非常简单,设我们用了 ss 个重量最大包裹袋放进了集装箱,那么我们把重量最大的包裹袋全部换为重量最小的包裹袋也一定是可以放进集装箱的,这样装进集装箱的总重量就是它的下限。我们用 LL 表示它的下限,即:

L=s×xL = s \times x

那么答案就在 LLRR 之间,因为我们能够保证 R>yR > y 。所以我们就拿 LLyy 取较大值,即答案。

贴心附上代码

CPP
#include<bits/stdc++.h>
using namespace std;
long long n,x,y,s,k;
int main() {
	cin>>n>>x>>y;
	k=x+n-1;
	if(y%k==0) s=y/k;
	else s=y/k+1;
	s*=x;
	cout<<max(s,y);
	return 0; 
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...