1 条题解

  • 0
    @ 2025-8-24 23:07:59

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar duanxinghe
    对谈天湖序,微暗仙著雨|| 互关

    搬运于2025-08-24 23:07:59,当前版本为作者最后更新于2025-01-05 20:52:21,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    洛谷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×x L = s \times x


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


    贴心附上代码

    #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; 
    }
    
    • 1

    信息

    ID
    11253
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者