zoukankan      html  css  js  c++  java
  • 「USACO13MAR」「LuoguP3080」 牛跑The Cow Run (区间dp

    题目描述

    Farmer John has forgotten to repair a hole in the fence on his farm, and his N cows (1 <= N <= 1,000) have escaped and gone on a rampage! Each minute a cow is outside the fence, she causes one dollar worth of damage. FJ must visit each cow to install a halter that will calm the cow and stop the damage.

    Fortunately, the cows are positioned at distinct locations along a straight line on a road outside the farm. FJ knows the location P_i of each cow i (-500,000 <= P_i <= 500,000, P_i != 0) relative to the gate (position 0) where FJ starts.

    FJ moves at one unit of distance per minute and can install a halter instantly. Please determine the order that FJ should visit the cows so he can minimize the total cost of the damage; you should compute the minimum total damage cost in this case.

    农夫约翰的牧场围栏上出现了一个洞,有N(1 <= N <= 1,000)只牛从这个洞逃出了牧场。这些出逃的奶牛很狂躁,他们在外面到处搞破坏,每分钟每头牛都会给约翰带来1美元的损失。约翰必须用缰绳套住所有的牛,以停止他们搞破坏。

    幸运的是,奶牛们都在牧场外一条笔直的公路上,牧场的大门恰好位于公里的0点处。约翰知道每头牛距离牧场大门的距离P_i(-500,000 <= P_i <= 500,000, P_i != 0)

    约翰从农场大门出发,每分钟移动一个单位距离,每到一头牛所在的地点,约翰就会给它套上缰绳,套缰绳不花时间。按怎样的顺序去给牛套缰绳才能使约翰损失的费用最少?

    输入输出格式

    输入格式:

    * Line 1: The number of cows, N.

    * Lines 2..N+1: Line i+1 contains the integer P_i.

    输出格式:

    * Line 1: The minimum total cost of the damage.

    输入输出样例

    输入样例#1: 复制
    4 
    -2 
    -12 
    3 
    7 
    
    输出样例#1: 复制
    50 
    

    说明

    Four cows placed in positions: -2, -12, 3, and 7.

    The optimal visit order is -2, 3, 7, -12. FJ arrives at position -2 in 2 minutes for a total of 2 dollars in damage for that cow.

    He then travels to position 3 (distance: 5) where the cumulative damage is 2 + 5 = 7 dollars for that cow.

    He spends 4 more minutes to get to 7 at a cost of 7 + 4 = 11 dollars for that cow.

    Finally, he spends 19 minutes to go to -12 with a cost of 11 + 19 = 30 dollars.

    The total damage is 2 + 7 + 11 + 30 = 50 dollars.


    题解

    不知道为什么能蓝。

    这是一类被我们机房称为老王关灯的题鬼嘞只有我这么叫

    老(wan)王(e)关(zhi)灯(yuan)

    这道题比老王关灯还简单一丢丢,不用算功率啦,

    单位时间消耗的dollar直接算未覆盖区间就好啦~

    然后这种题 开个long long开不出吃亏开不出上当

    还能有效预防越界(QAQ!!!!)

     1 /*
     2     qwerta
     3     P3080 [USACO13MAR]牛跑The Cow Run
     4     Accepted
     5     100
     6     代码 C++,0.81KB
     7     提交时间 2018-09-22 18:59:00
     8     耗时/内存
     9     231ms, 16760KB
    10 */
    11 #include<cmath>
    12 #include<cstdio>
    13 #include<cstring>
    14 #include<iostream>
    15 #include<algorithm>
    16 using namespace std;
    17 int dis[1007];
    18 long long f[1007][1007][2];
    19 int main()
    20 {
    21     //freopen("a.in","r",stdin);
    22     int n;
    23     scanf("%d",&n);
    24     for(int i=1;i<=n;++i)
    25     scanf("%d",&dis[i]);
    26     n++;
    27     sort(dis+1,dis+n+1);
    28     memset(f,127,sizeof(f));
    29     int x=0;
    30     for(int i=1;i<=n;++i)
    31     if(dis[i]==0)x=i;
    32     f[x][x][0]=f[x][x][1]=0;
    33     for(int len=2;len<=n;++len)
    34     for(int l=1,r=len;r<=n;++l,++r)
    35     {
    36         f[l][r][0]=min(f[l+1][r][0]+(dis[l+1]-dis[l])*(n-len+1),
    37                        f[l+1][r][1]+(dis[r]-dis[l])*(n-len+1));
    38         f[l][r][1]=min(f[l][r-1][0]+(dis[r]-dis[l])*(n-len+1),
    39                        f[l][r-1][1]+(dis[r]-dis[r-1])*(n-len+1));
    40     }
    41     cout<<min(f[1][n][0],f[1][n][1]);
    42     return 0;
    43 }
  • 相关阅读:
    第一个win8应用的制作过程
    win8开发-Xaml学习笔记一
    梦想成为“老板”的第二天
    梦想成为“老板”的第一天
    HTTP请求
    linux常用命令
    HTML中常用的标签
    HTML基本结构
    记录Django的settings文件常用配置
    Oracle数据泵expdp、impdp
  • 原文地址:https://www.cnblogs.com/qwerta/p/9690897.html
Copyright © 2011-2022 走看看