zoukankan      html  css  js  c++  java
  • YBT 拯救花园

    问题描述

            一天,晨晨发现自己的 n(2≤n≤100)只兔子跑到自己的花园里面,它们在尽情的吃 着她的宝贝花卉。          晨晨看在眼里痛在心里,她现在只能把兔子逐个的抓回笼子里面。而送 每只兔子回去的时间都不同,例如送第 i 只兔子回去需要 ti(1≤ti≤100)单位时间,那么 晨晨送第 i 只兔子来回共需要花费 2*ti 单位时间,另外每一只兔子单位时间的破坏力都不 同,例如第 i 只兔子单位时间内破坏 di (1≤di≤100)朵花。

            现在的问题是,晨晨如何安排送这 n 只兔子回笼子才能使这些兔子的破坏最小。

    输入格式

            第一行:一个整数 n(1≤n≤100);

            接着有 n 行,每行两个空格分开的整数 ti di,分别代表第 i 只兔子的送回去的时间, 和单位时间破坏力。

     

    输出格式

            一行:一个整数,代表这些兔子破坏多少花卉。

    输入样例

    6

    3 1

    2 5

    2 3

    3 2

    4 1

    1 6

    输出样例

    86 

    题解

            假设我们已知最优序列,那么最优序列中定然满足$d[2] imes t[1] imes 2 < d[1] imes t[2] imes 2$,得$frac {t[1]}{d[1]} < frac{t[2]}{d[2]}$,即$frac{t[i]}{d[i]}$为排序关键字,直接sort即可。

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    struct Rabbit
    {
        int t, d;
        double v;
        friend inline bool operator < (Rabbit x, Rabbit y)
        {
            return x.v < y.v;
        }
    };
    
    int n;
    Rabbit a[105];
    int ans;
    
    int main()
    {
        cin >> n;
        for(register int i = 1; i <= n; ++i)
        {
            cin >> a[i].t >> a[i].d;
            a[i].v = (double)a[i].t / a[i].d;
        }
        sort(a + 1, a + n + 1);
        for(register int i = 1; i <= n; ++i)
        {
            a[i].t = 2 * a[i].t + a[i - 1].t;
            ans += a[i - 1].t * a[i].d;
        }
        cout << ans;
        return 0;
    }
    参考程序
  • 相关阅读:
    PAT1066(AVL树)
    判断是对象,还是数组对象
    electron打包成.exe后限制只启动一个应用
    electron启动出现短暂的白屏
    js sort方法根据数组中对象的某一个属性值进行排序
    VUE DIV模拟input框的基本处理
    vue 设置 input 为不可以编辑
    VUE实现限制输入框最多输入15个中文,或者30个英文
    electron 点击事件无效
    electron监听系统托盘,electron是否最小化到系统托盘
  • 原文地址:https://www.cnblogs.com/kcn999/p/10801455.html
Copyright © 2011-2022 走看看