zoukankan      html  css  js  c++  java
  • 关于hdu 2059的完整解法与心得

     首先我必须说一句。。。。这题对我来说实在是挺难的,,,做了好几个小时,不过值得庆幸的是最后在学长的帮助下终于做出来了。。。但是虽然难我却犯了无谓的错误浪费了许多宝贵的时间。。。首先最不应该忽略的就是清零。。。这个错误我已经犯N遍了。。。还有就是得多用些笔算神马的。。这样在调试的时候比较容易发现潜在的错误。。。

    本题的主要思路:先考虑可能在任意一个加油站作为乌龟最后加油的地方。。。然后利用第推的思想卒个求和。。。。比如乌龟可能把第二个加油站作为最后加油的地点。。。由此我们需要依次求出把原点作为前一个加油站到第二个加油站的时间和把第一个加油站作为前一个加油站到第二加油站的时间。。。然后比较两种路径所用时间的多少求出把第二个作为最后加油站所用的最短时间。。。以此类推。。。以后各种情况均可由此法求得。。。。

    #include"stdio.h"
    int l,n,t,c,vr,vt1,vt2;
    int i,j,p[105];
    double timer,cmp,time[105],bestime;
    double maxt(double *time,int n)
    {
    int index=0,i;
    for(i=0;i<=n;i++)
    if(time[index]>time[i])
    index=i;
    return time[index];
    }


    void foretime(double *time,int *p)
    {

    p[0]=0;
    for(i=1;i<=n;i++)
    {
    for(j=0;j<i;j++)
    {
    if(p[i]-p[j]>c)
    cmp=time[j]+c*1.0/vt1+(p[i]-p[j]-c)*1.0/vt2+t;
    else
    cmp=time[j]+(p[i]-p[j])*1.0/vt1+t;
    if(j==0)
    time[i]=cmp-t;
    else if(time[i]>cmp)
    time[i]=cmp;
    }
    }
    }


    int main( )
    {

    while(scanf("%d",&l)==1)
    {
    for(i=0;i<105;i++)
    time[i]=0;
    scanf("%d%d%d",&n,&c,&t);
    scanf("%d%d%d",&vr,&vt1,&vt2);
    for(i=1;i<=n;i++)
    scanf("%d",&p[i]);
    foretime(time,p);
    for(i=0;i<=n;i++)
    {
    if(i==0)
    {
    if(l-p[i]>c )
    time[i]=time[i]+c*1.0/vt1+(l-p[i]-c)*1.0/vt2;
    else
    time[i]=time[i]+(l-p[i])*1.0/vt1;
    }
    else if(l-p[i]>c)
    time[i]=time[i]+c*1.0/vt1+(l-p[i]-c)*1.0/vt2+t;
    else
    time[i]=time[i]+(l-p[i])*1.0/vt1+t;
    }
    bestime=maxt(time,n);
    timer=l*1.0/vr;
    if(timer>bestime)
    printf("What a pity rabbit!\n");
    else
    printf("Good job,rabbit!\n");
    }
    return 0;
    }
  • 相关阅读:
    ios-pch文件的手动添加
    iOS远程消息推送自我整理版
    iOS远程消息推送
    苹果App store 2015最新审核标准公布(2015.3)
    App上线基本流程
    iOS中常用的正则表达式
    如何获取App当前版本号
    添加Appicon的方法
    键盘弹出
    iOS9适配中出现的一些常见问题
  • 原文地址:https://www.cnblogs.com/chaosheng/p/2329579.html
Copyright © 2011-2022 走看看