• ZOJ


    When we are focusing on solving problems, we usually prefer to stay in front of computers rather than go out for lunch. At this time, we may call for food delivery.

    Suppose there are N people living in a straight street that is just lies on an X-coordinate axis. The ith person's coordinate is Xi meters. And in the street there is a take-out restaurant which has coordinates X meters. One day at lunchtime, each person takes an order from the restaurant at the same time. As a worker in the restaurant, you need to start from the restaurant, send food to the N people, and then come back to the restaurant. Your speed is V-1 meters per minute.

    You know that the N people have different personal characters; therefore they have different feeling on the time their food arrives. Their feelings are measured by Displeasure Index. At the beginning, the Displeasure Index for each person is 0. When waiting for the food, the ith person will gain Bi Displeasure Index per minute.

    If one's Displeasure Index goes too high, he will not buy your food any more. So you need to keep the sum of all people's Displeasure Index as low as possible in order to maximize your income. Your task is to find the minimal sum of Displeasure Index.

    Input

    The input contains multiple test cases, separated with a blank line. Each case is started with three integers N ( 1 <= N <= 1000 ), V ( V > 0), X ( X >= 0 ), then N lines followed. Each line contains two integers Xi ( Xi >= 0 ), Bi ( Bi >= 0), which are described above.

    You can safely assume that all numbers in the input and output will be less than 231- 1.

    Please process to the end-of-file.

    Output

    For each test case please output a single number, which is the minimal sum of Displeasure Index. One test case per line.

    Sample Input

    5 1 0
    1 1
    2 2
    3 3
    4 4
    5 5

    Sample Output

    55

    题意:一条大街上有n个人点外卖,每个人每等一分钟就会增加一定的不满意度。给出每个人的坐标xi和每分钟增加的不满意度bi、

    餐馆坐标x和外卖小哥走一公里需要的时间(1/v)。外卖小哥必须给每个人都送到,求顾客的不满意度和的最小值。

     题解:由于不算外卖小哥等顾客拿外卖的时间(e_e),外卖小哥只要经过了顾客的位置,就直接把外卖给顾客。

    可以把外卖小哥走过的位置简化为一个区间,要使区间内顾客不满意度和最短,外卖小哥最后送外卖的位置一定要在

    区间端点。先按位置从左到右排序,设sum[i]为第一个到第n个人每分等一分钟增长的不满意度和,

    dp[i][j][0]表示最后一次送外卖是在左端点,dp[i][j][1]表示在右端点。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int INF=0x3f3f3f3f;
    int a[1005];
    int b[1005];
    int dp[1005][1005][2];
    int sum[1005];
    
    struct node
    {
        int x,b;
    } s[1005];
    
    bool cmp(node x,node y)
    {
        return x.x<y.x;
    }
    
    int main()
    {
        int n,v,x;
        while(~scanf("%d%d%d",&n,&v,&x))
        {
            sum[0]=0;
            for(int i=1; i<=n; i++)
                scanf("%d%d",&s[i].x,&s[i].b);
            memset(dp,INF,sizeof dp);
            sort(s+1,s+n+1,cmp);
            for(int i=1;i<=n;i++)
                sum[i]=sum[i-1]+s[i].b;
            for(int i=1; i<=n; i++)
                dp[i][i][0]=dp[i][i][1]=abs(s[i].x-x)*sum[n];
            for(int l=2; l<=n; l++)
                for(int i=1; i<=n-l+1; i++)
                {
                    int j=i+l-1;
                    dp[i][j][0]=min(dp[i][j][0],dp[i+1][j][0]+abs(s[i+1].x-s[i].x)*(sum[n]-sum[j]+sum[i]));
                    dp[i][j][0]=min(dp[i][j][0],dp[i+1][j][1]+abs(s[j].x-s[i].x)*(sum[n]-sum[j]+sum[i]));
                    dp[i][j][1]=min(dp[i][j][1],dp[i][j-1][0]+abs(s[j].x-s[i].x)*(sum[n]-sum[j-1]+sum[i-1]));
                    dp[i][j][1]=min(dp[i][j][1],dp[i][j-1][1]+abs(s[j].x-s[j-1].x)*(sum[n]-sum[j-1]+sum[i-1]));
                }
            printf("%d
    ",min(dp[1][n][0],dp[1][n][1])*v);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Web开发学习之路--Eclipse+Tomcat+mysql之初体验
    Android必知必会-Stetho调试工具
    Android开发学习之路--NDK、JNI之初体验
    OpenMP基础----以图像处理中的问题为例
    leetcode 2 Add Two Numbers
    Java在linux下调用C/C++生成的so文件
    OpenCV特征点检测匹配图像-----添加包围盒
    [POJ 1442] Black Box
    [POJ 2019] Cornfields
    [HDU 1806] Frequent values
  • 原文地址:https://www.cnblogs.com/siyecaodesushuo/p/7198860.html
Copyright © 2020-2023  润新知