zoukankan      html  css  js  c++  java
  • hdu 2059 DP

    题意:

    龟兔赛跑,兔子以恒定速度跑,乌龟骑电动车,中间有若干个站点,乌龟可以选择充电或者不充,充电需要花费时间,但有电时电动车快,没电时慢,问兔子能否赢乌龟。

    一开始我用了各种姿势贪心,没有过。那个时候还根本不知道什么是动态规划,这也是 hdu 11 页上少数几道算法题了

    如果知道 DP 那么这道题就可以做了,对于每个站点,任务是求到达的最短时间,其最短时间可以由之前的点来更新:枚举该点的上一次充电的站点,以到达上一站点的最短时间+中间不充电花的时间,以其中最短时间作为最优解,而不用考虑本站需不需要充电;

    ans [ i ] = min ( ans [ j ] + t [ j , i ] )    ( j ∈[ 0 , i - 1 ] );

     1 #include<stdio.h>
     2 #define min(a,b) (a)<(b)?a:b
     3 int L,N,C,T,VR,VT1,VT2,p[102];
     4 double f(int d)
     5 {
     6      if(d<=C) return (double)d/VT1+T;
     7      else return (double)C/VT1+(double)(d-C)/VT2+T;
     8 }
     9 int main(){
    10     while(scanf("%d%d%d%d%d%d%d",&L,&N,&C,&T,&VR,&VT1,&VT2)!=EOF){
    11         double ans[102];
    12         int i,j;
    13         for(i=1;i<=N;i++)scanf("%d",&p[i]);
    14         p[N+1]=L;
    15         for(i=1;i<=N+1;i++){
    16             ans[i]=f(p[i])-T;
    17             for(j=1;j<i;j++) ans[i]=min(ans[i],(ans[j]+f(p[i]-p[j])));
    18         }
    19         if(ans[N+1]>(double)L/VR) printf("Good job,rabbit!
    ");
    20         else printf("What a pity rabbit!
    ");
    21     }
    22     return 0;
    23 }
    View Code
  • 相关阅读:
    python模块添加
    Python 的列表排序
    python中文处理问题
    排序算法堆排序
    搜索二分搜索
    排序算法(随机)快速排序(递归)
    排序算法计数排序
    OO设计原则总结
    异常控制以及进程调度
    ubuntu12.04 alternate win7 双系统安装
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/4455115.html
Copyright © 2011-2022 走看看