1 条题解

  • 0
    @ 2025-8-24 22:39:07

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Give_up
    **

    搬运于2025-08-24 22:39:07,当前版本为作者最后更新于2022-07-25 19:22:57,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    题目传送门

    题目思路

    此题就是一道简单的贪心,先从小到大排序(也可以从大到小),取能买的起的最贵的物品。

    找到后从小到大遍历,求能买的起的价值最高的的物品最多能换到多少其他的物品,用一个计数器计数,最后输出这个计数器的值就行了。

    代码

    #include<bits/stdc++.h>
    #define int long long //a[i]的范围很大,要开long long
    #define N 1000010
    
    using namespace std;
    
    typedef long long ll;
    
    int read()
    {
        int x = 0,f = 1;
        char c = getchar();
        while(c<'0' || c>'9')
        {
            if(c=='-') f = -1;
            c = getchar();
        }
        while(c>='0' && c<='9')
        {
            x = (x<<3)+(x<<1)+(c^48);
            c = getchar();
        }
        return x*f;
    }//快读
    
    int a[N];
    
    signed main()
    {
        int n=read();
        for (int i=1;i<=n;i++)
            a[i] = read();
        int w=read(),k=0;
        sort(a+1,a+n+1); //从小到大排序
        for (int i=n;i>=1;i--)
        {
            if (w>=a[i])
            {
                k = a[i];
                break;
            }
        }//求能买的起的最贵的物品
        int ans = 0;//定义一个计数器,初始值为0
        for (int i=1;i<=n;i++)
        {
            if (k>=a[i])
            {
                ans++;//计数器+1
                k -= a[i];
            }
        }//求能买的起的价值最高的的物品最多能换到多少其他的物品
        cout << ans << endl;//输出计数器的值
        return 0; 
    }
    
    • 1

    信息

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