zoukankan      html  css  js  c++  java
  • [贪心]Rest Stops

    题目描述

    Farmer John and his personal trainer Bessie are hiking up Mount Vancowver. For their purposes (and yours), the mountain can be represented as a long straight trail of length LL meters (1≤L≤106). Farmer John will hike the trail at a constant travel rate of rF seconds per meter (1≤rF≤106). Since he is working on his stamina, he will not take any rest stops along the way.
    Bessie, however, is allowed to take rest stops, where she might find some tasty grass. Of course, she cannot stop just anywhere! There are N rest stops along the trail (1≤N≤105); the i-th stop is xi meters from the start of the trail (0<xi<L) and has a tastiness value ci (1≤ci≤106). If Bessie rests at stop i for t seconds, she receives ci⋅t tastiness units.

    When not at a rest stop, Bessie will be hiking at a fixed travel rate of rB seconds per meter (1≤rB≤106). Since Bessie is young and fit, rB is strictly less than rF.

    Bessie would like to maximize her consumption of tasty grass. But she is worried about Farmer John; she thinks that if at any point along the hike she is behind Farmer John on the trail, he might lose all motivation to continue!

    Help Bessie find the maximum total tastiness units she can obtain while making sure that Farmer John completes the hike.

    输入

    The first line of input contains four integers: L, N, rF, and rB. The next N lines describe the rest stops. For each i between 1 and N, the i+1-st line contains two integers xi and ci, describing the position of the i-th rest stop and the tastiness of the grass there.
    It is guaranteed that rF>rB, and 0<x1<⋯<xN<L. Note that rF and rB are given in seconds per meter!

    输出

    A single integer: the maximum total tastiness units Bessie can obtain.

    样例输入

    10 2 4 3
    7 2
    8 1
    

    样例输出

    15
    
    思路:总共可以休息的时间等于max_x*(rf-rb);那么在每一个站休息时间的总和等于max_x*(rf-rb);那么要使总val最大,则要对val值大的站分配更多一些的时间;

    AC代码:

    #include <iostream>
    #include<cstdio>
    #include<algorithm>
    typedef long long ll;
    using namespace std;
    
    struct STOP{
      ll pos,val;
      ll max_time;
    }stop[100010];
    
    bool cmp(STOP a,STOP b){
      return a.val>b.val;
    }
    
    int main()
    {
        ll L,n,rf,rb;
        scanf("%lld%lld%lld%lld",&L,&n,&rf,&rb);
        for(ll i=1;i<=n;i++){
            scanf("%lld%lld",&stop[i].pos,&stop[i].val);
            stop[i].max_time=stop[i].pos*(rf-rb);
        }
        sort(stop+1,stop+1+n,cmp);
        ll past_time=0;
        ll ans=0;
        for(ll i=1;i<=n;i++){
            stop[i].max_time=(stop[i].max_time-past_time>0)?stop[i].max_time-tot_time:0;
            past_time+=stop[i].max_time;
            ans+=stop[i].max_time*stop[i].val;
        }
        printf("%lld
    ",ans);
        return 0;
    }
    
    
    转载请注明出处:https://www.cnblogs.com/lllxq/
  • 相关阅读:
    用Tinkercad学arduino之 LCD电压电流表
    用Tinkercad学arduino之 L293D电机驱动器驱动直流电机
    用Tinkercad学arduino之 74HC595 寄存器控制1位7段数码管
    用Tinkercad学arduino之 74HC595寄存器控制8个led跑马灯
    用Tinkercad学arduino之 红外遥控器
    用Tinkercad学arduino之 人体红外检测报警 LCD显示
    用Tinkercad学arduino之 人体红外检测报警 蜂鸣器+LED
    用Tinkercad学arduino之 电位器控制伺服电机转向
    用Tinkercad学arduino之 光线控制彩灯
    用Tinkercad学arduino之 温度LED报警
  • 原文地址:https://www.cnblogs.com/lllxq/p/9023925.html
Copyright © 2011-2022 走看看