zoukankan      html  css  js  c++  java
  • 题解:2018级算法第四次上机 C4-商人卖鱼

    题目描述:

    样例:

     

    实现解释:

    需要简单分析的贪心题

    知识点:

    贪心,自定义排序,提前存储

    题目分析:

    卖鱼,鱼卖出去需要时间,鱼没被卖出去之前需要吃饲料

    则有,如果卖a鱼的话b鱼会吃饲料c份,而卖b鱼a鱼会吃d份,为了消耗更少的饲料,如果c比d小,则应该卖a鱼。而计算上即c = a.t*b.d,d = a.d*b.t。

    因此需要做的就是依据上述公式对所有鱼的买卖优先级进行排序(排序的cmp函数实现有进行简单解释),然后按顺序计算需要的饲料数即可。

    为了不再遍历计算卖鱼时的花费,这里用total存储当前剩余鱼的吃饲料数。

    难点:

    不算太难,主要既是分析出鱼的优先级,并且合理的排序和提前存储

    完整代码:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define MAX 100010
    long long n;
    long long total,food;
    struct fish
    {
        long long t;
        long long d;
    }all[MAX];//简单定义一个鱼 
    bool cmp(fish a,fish b){
        //比较函数白话解释 
        //第一个参数是自己,第二个是别人
        //如果(比较条件成立)我自己就会比其他人更靠近队列头部
        
        //这里的情况就是如果我的d乘上他人的t大于他人的d乘上自己的t
        //即如果卖我会需要更多的饲料,我就更靠近头部,先卖我 
        return a.d*b.t > a.t*b.d;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin >> n;
        total = food = 0;
        //为了避免遍历计算,和浩瀚星辰一样的提前存储花费 
        for(int i = 0;i<n;i++)
        {
            cin >> all[i].t >> all[i].d;
            total += all[i].d;
        }
        sort(all,all+n,cmp);
        //不必优先队列,因为直接全部处理即可,和星辰的区别 
        for(int i = 0;i<n;i++)
        {
    //        cout << all[i].t <<' '<< all[i].d <<'
    '; 
            total -= all[i].d;//去除要卖的鱼的花费 
            food += total*all[i].t;//加上卖鱼时需要的总饲料 
        }
        cout << food << '
    ';
        return 0;
    }
    View Code
  • 相关阅读:
    mysql基础知识
    django知识
    gitlab的CICD搭建记录
    nginx的基础知识
    JAVA基础知识总结——part1
    【Python】python基础练习题_1
    【Docker】——Linux下搭建docker环境
    day3
    python_day2
    python_day1
  • 原文地址:https://www.cnblogs.com/doUlikewyx/p/11823863.html
Copyright © 2011-2022 走看看