zoukankan      html  css  js  c++  java
  • 杭电2059

    题意:路程L,兔子速度VR,乌龟开车速度VT1,踩车速度VT2,给出每个充电站与原点的距离pi,每次充电时间都为T,问乌龟可能不可能赢兔子。

     
    Analyse:

    p1到pn为可充电地点(p0为原点)。假设最优方案中最后一个充电的地点是pn-2,则对于p0至pn-2这段路的充电地点的选择是独立于pn-2至pn之外的,最优方案中,p0到pn-2内的充电点都要选对p0至pn-2最优的地点,因此设time[k]为到达pk点的最快时间,记之前充电的地方为p[lastchar],记p[lastchar](包括p[lastchar],因为可能不充电)到p[k]之间的最优充电点为p[j],则p0到pn的最快时间为time[j]加上p[j]到p[k]最快的时间。k由零开始递增到n,即可求出time[n]。lastchar初始化为0,因为0点一定充了电。

    View Code
     1 #include<stdio.h>
    2 main()
    3 {
    4 int p[102];
    5 int i,j;
    6 int mark,lastchar; //mark the last charging location
    7 int v1,v2,vr;
    8 int l,c,len; //len measures the distance between two points
    9 int n,t;
    10 double time[101];
    11 double temp,min;
    12 while(scanf("%d",&l)!=EOF)
    13 {
    14 scanf("%d%d%d",&n,&c,&t);
    15 scanf("%d%d%d",&vr,&v1,&v2);
    16 p[0]=0;
    17 p[n+1]=l;
    18 for(i=1;i<=n;i++)
    19 scanf("%d",&p[i]);
    20 lastchar=0;
    21 time[0]=0;
    22 for(i=1;i<=n+1;i++)
    23 {
    24 min=-1;
    25 for(j=lastchar;j<i;j++)
    26 {
    27 len=p[i]-p[j];
    28 temp=len>c?1.0*c/v1+(len-c+0.0)/v2:1.0*len/v1;
    29 temp+=time[j];
    30 if(j)
    31 temp+=t;
    32 if(min<0 || min>temp)
    33 {
    34 min=temp;
    35 mark=j;
    36 }
    37 }
    38 lastchar=mark;
    39 time[i]=min;
    40 }
    41 puts(1.0*l/vr>time[n+1]?"What a pity rabbit!":"Good job,rabbit!");
    42 }
    43 }



  • 相关阅读:
    对象拷贝-深拷贝
    eclipse安装桌面快捷方式
    ajax 分页
    单例模式
    过滤器
    ajax参数详解
    json
    反射
    jdbc02
    jdbc --例子7
  • 原文地址:https://www.cnblogs.com/ZShogg/p/2419526.html
Copyright © 2011-2022 走看看