• poj 3262 牛毁坏花问题 贪心算法


    题意:有n头牛,每头牛回去都需要一定时间,如果呆在原地就会毁坏花朵。问:怎么安排使得毁坏的花朵最少?

    思路:

       拉走成本最高的。

    1. 什么是成本?毁坏花朵的数量。
    2. 例如有两种排序   (这里用(a,b)表示题意,a表示往回走的时间,b表示呆在原处毁坏花朵的数量

         (a,b) (c,d) 成本为 x*b+(x+a)*d;   

         (c,d) (a,b) 成本为 x*d+(x+c)*b;

      两种成本显示,如果ad>bc则选择下面那种排序,如果bc>ad则选择上面那种排序,实现的代码

    bool cmp(Cow a, Cow b)
    {
        return a.d / a.t > b.d / b.t;
    }

      通过这种成本由高到低的排序,只要遍历,时间*毁坏的花朵累加既可以得到答案

    解决问题的代码:

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    struct Cow
    {
        double t, d;
    }cow[100001];
    bool cmp(Cow a, Cow b)
    {
        return a.d / a.t > b.d / b.t;
    }
    int main()
    {
        int n;
        scanf("%d", &n);
        for (int i = 0; i < n; i++)
            scanf("%lf%lf", &cow[i].t, &cow[i].d);
        sort(cow, cow + n, cmp);
        long long sum = 0, ans = 0;
        for (int i = 0; i < n; i++)
        {
            sum += ans * 2 * cow[i].d;
            ans += cow[i].t;
        }
        printf("%d
    ", sum);
        return 0;
    }
    君子知命不惧,自当日日自新
  • 相关阅读:
    vue项目架构
    vue.js 视频播放
    Intellij使用"easyexplore"
    ScrollView嵌套GridView不显示顶部
    Android开发日志统一管理
    Android带弹性的View
    Mysql数据库乱码
    为Activity生成桌面快捷方式
    二维码扫描ZXing简化
    减少XML文件数
  • 原文地址:https://www.cnblogs.com/xuxiaojin/p/9401179.html
Copyright © 2020-2023  润新知