• HDU


    Problem Description
    Master Di plans to take his girlfriend for a travel by bike. Their journey, which can be seen as a line segment of length L, is a road of swamps and flats. In the swamp, it takes A point strengths per meter for Master Di to ride; In the flats, Master Di will regain B point strengths per meter when riding. Master Di wonders:In the beginning, he needs to prepare how much minimum strengths. (Except riding all the time,Master Di has no other choice)

     
    Input
    In the first line there is an integer t (1t50), indicating the number of test cases.
    For each test case:
    The first line contains four integers, n, A, B, L.
    Next n lines, each line contains two integers: Li,Ri, which represents the interval [Li,Ri] is swamp.
    1n100,1L105,1A10,1B101Li<RiL.
    Make sure intervals are not overlapped which means Ri<Li+1 for each i (1i<n).
    Others are all flats except the swamps.
     
    Output
    For each text case:
    Please output “Case #k: answer”(without quotes) one line, where k means the case number counting from 1, and the answer is his minimum strengths in the beginning.
     
    Sample Input
    1 2 2 2 5 1 2 3 4
     
    Sample Output
    Case #1: 0
     
    Source
     
    题意:要我们找需要消耗体力最多的那个地方(即你走一段沼泽,可能会体力为0,这就是你开头需要准备的体力。或是你上一段体力补充完了,这一段又被沼泽消耗光了体力,这也是要补充的体力)。读不懂题真要命
    #include <cstdio>
    #include <iostream>
    #include <cmath>
    #include <string>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #include <map>
    using namespace std;
    #define ll long long
    const int maxn = 5100;
    
    int t, n, A, B, L, l, r;
    
    int main()
    {
        scanf("%d", &t);
        int miao = t;
        while(t--)
        {
            scanf("%d%d%d%d", &n, &A, &B, &L);
            int legacy = 0, position = 0, need = 0;//legacy是剩余耐力,need是需求,position是当前位置
            for(int i = 0; i<n; i++)
            {
                scanf("%d%d", &l, &r);
                legacy += (l-position)*B-(r-l)*A;//(上一段平底回复的)-(这一段澡泽消耗的)
                position = r;//把上一段澡泽的最后一个位置标记下来
                if(legacy<0)//耐力不够时需要额外添加
                {
                    need -= legacy;//这时候legacy是负的,所以要减
                    legacy = 0;
                }
            }
            printf("Case #%d: %d
    ", miao-t, need);
        }
        return 0;
    }
  • 相关阅读:
    为了博多
    [JSOI2008]星球大战starwar
    【网络流24题】最小路径覆盖问题
    【中学高级水题本】关路灯
    【网络流24题】分配问题
    【网络流24题】方格取数问题
    【网络流24题】汽车加油行驶
    [洛谷P2057][bzoj1934]善意的投票(最大流)
    LeetCode(38) Count and Say
    LeetCode(36)Valid Sudoku
  • 原文地址:https://www.cnblogs.com/RootVount/p/11235961.html
Copyright © 2020-2023  润新知