1 条题解

  • 0
    @ 2025-8-24 21:39:42

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 幽界の冥神
    当太阳,再次照亮天空;请记得,要叫我一声啊...

    搬运于2025-08-24 21:39:42,当前版本为作者最后更新于2017-10-09 21:52:37,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    #include "cstdio"
    #include "algorithm"
    using namespace std;
    struct food{int val,num;}f[102];//num为这个商店的存货,val为在这个商店买一份食物的价钱
    int number,s,n,ans=0;
    bool cmp(food a,food b){return a.val<b.val;}//从小到大排序 
    int Min(int a,int b){return a<b?a:b;}
    int main(){
        scanf("%d%d%d",&number,&s,&n);//number为总共要买的食物,s为总路程,n为商店数 
        for(int i=1,a,b;i<=n;i++){
            scanf("%d%d%d",&a,&f[i].num ,&b);
            f[i].val=s-a+b;//在这个商店买一份食物的价钱 
        }
        sort(f+1,f+1+n,cmp);//排序,取最小值 
        for(int i=1;i<=n&&number>0;i++){
            ans+=Min(number,f[i].num)*f[i].val;//每到一个商店就取光光 
            number-=f[i].num;//剩下需要买的食物 
        }
        printf("%d",ans);//输出 
        return 0;
    }
    

    个人认为这是比较简短的代码了,缩进不大好看,见谅。。。 一般贪心必将配合排序(至少我做的题目是这样的)不排序的贪心很可能有问题。。。

    基本就是这样了,注释应该还蛮详细的

    • 1

    信息

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