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;
    }
    参考程序
  • 相关阅读:
    Web安全学习计划
    机器学习资源大全
    推荐引擎的学习资料
    《Servlet与JSP核心编程》读书笔记
    Application "org.eclipse.ui.ide.workbench" could not be found in the registry.问题的解决
    Android 百度地图开发(二)
    Linux系统编程_1_文件夹读取(实现简单ls命令)
    Bootstrap 模态框、轮播 结合使用
    cocos2d-x 3.0游戏实例学习笔记 《跑酷》移植到android手机
    Unique Binary Search Trees II
  • 原文地址:https://www.cnblogs.com/kcn999/p/10801455.html
Copyright © 2011-2022 走看看