zoukankan      html  css  js  c++  java
  • P2878 [USACO07JAN]保护花朵Protecting the Flowers

    题目描述

    有N头奶牛跑到FJ的花园里去吃花儿了,它们分别在距离牛圈T分钟处吃花儿,每分钟会吃掉d朵卡哇伊的花儿,

    (此处有点拗口,不要在意细节啊!),FJ现在要将它们给弄回牛圈,但是他每次只能弄一头回去,来回用时总共为2 * T分钟,

    在这段时间内,其它的奶牛会继续吃FJ卡哇伊的花儿,速度保持不变,当然正在被赶回牛圈的奶牛就没口福了!

    现在要求以一种最棒的方法来尽可能的减少花儿的损失数量,求奶牛吃掉花儿的最少朵数!

    输入输出格式

    输入格式:

     

    第1行:单个整数N.

    第2..N + 1行:每行包含两个以空格分隔的整数Ti和Di,它们描述了单个牛的特征

     

    输出格式:

     

    第1行:一个整数,它是被毁花的最小数量

    输入输出样例

    输入样例#1: 复制
    6
    3 1
    2 5
    2 3
    3 2
    4 1
    1 6
    输出样例#1: 复制
    86

    说明

    FJ按以下顺序返回奶牛:6,2,3,4,1,5。当他将牛6运到谷仓时,其他人会摧毁24朵花; 

    接下来他将采取牛2,失去28多个他美丽的植物群。对于奶牛3,4,1,他分别失去了16,12和6朵花。

    当他挑选奶牛5时,没有更多的奶牛损坏花朵,因此奶牛的损失为零。以这种方式失去的总花是24 + 28 + 16 + 12 + 6 = 86。

    为什么!!!

    贪心这么难!!!

    怎么也想不到啊。。。

    mmp,

    厌世。

    teacher胡乱找方法,,

    真的是要当无数次小白鼠,

    没有信心,就不要立什么flag。。

    hh,当然你觉得无所谓,

    对你来说没什么影响,

    反正就这么点儿相处时间了,,

    hh,没前途的你,

    中年油腻男!!!

    呸!

    讲题讲题,,

    贪心,啊。

    我刚开始只按他们的速度排了序,

    想让速度大的先离开,

    也是一种思路吧,

    但还有很多特殊的比较大的情况是不成立的,

    这种思路只能拿十分。

    然后肯定是要先按一种思路排序,之后枚举,

    枚举的时候也要注意,

    尽量想出思路来用一重循环。

    这里贪心的思路不止要看速度,当然也要看距离,

    速度大,距离小的优先,

    是吧?

    嗯,应该是,

    所以呢?

    怎么把二者结合起来呢??

    比例式!做除法啊!!!

    太聪明了太聪明了!

    比较速度d/距离t,就好了!

    然后排完序之后的枚举这里算一个优化吧,

    解释不出来,

    应该能看懂,

    然后恍然大悟!

    哦!

    这样啊!!!

    hhh,,

    看代码吧:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<cstring>
     6 using namespace std;
     7 
     8 int n;
     9 long long ans,t;
    10 
    11 struct node{
    12     int t,d;
    13 }a[20000002];
    14 
    15 bool cmp(node x,node y)
    16 {
    17     return (x.d *1.0)/(x.t *1.0)*1.0>=(y.d *1.0)/(y.t *1.0)*1.0;
    18 }
    19 
    20 int main()
    21 {
    22     scanf("%d",&n);
    23     for(int i=1;i<=n;++i)
    24         scanf("%d%d",&a[i].t ,&a[i].d );
    25     sort(a+1,a+n+1,cmp);
    26     for(int i=1;i<=n;++i)
    27     {
    28         ans+=t*a[i].d ;
    29         t+=a[i].t *2;
    30     } 
    31     printf("%lld",ans);
    32     return 0;
    33 }

    如果你不开心,那我就把右边这个帅傻子分享给你吧, 

    你看,他这么好看,那么深情的望着你,你还伤心吗? 

    真的!这照片盯上他五秒钟就想笑了。 

    一切都会过去的。

  • 相关阅读:
    UVa Live 3942 Remember the Word
    UVa 11019 Matrix Matcher
    bzoj 4445 小凸想跑步
    Codeforces 832E Vasya and Shifts
    二值法方法综述及matlab程序
    排序算法(1)-插入,选择,冒泡
    如果我想了解一个陌生人
    Libsvm在matlab环境下使用指南
    科学预测世界杯-采用机器学习方法
    应用笔画宽度变换(SWT)来检测自然场景中的文本
  • 原文地址:https://www.cnblogs.com/Mary-Sue/p/9438650.html
Copyright © 2011-2022 走看看