zoukankan      html  css  js  c++  java
  • 动态规划解决hdu龟兔赛跑

    import java.util.Scanner;
    
    class test {
        private double dp[];//用来存储每段的最短时间
        private double p[];//用来存储每个充电站点离起点的距离
        private int n,c,t;
        private double vr,vt1,vt2;
        private double Length;
        
        public boolean Solution(){
            System.out.print("请输入每个站点离起点的距离:");
            Scanner iner=new Scanner(System.in);
            for(int i=1;i<=this.n;++i){
                p[i]=iner.nextInt();
            }
            double curTime=0;
            for(int i=1;i<=this.n+1;++i){
                double minTime=100000.0;
              for(int j=0;j<i;++j){
                if(c>p[i]){   //判断充满电后的距离能不能直接过站点
                    curTime=p[i]/vt1;
                }else{
                    curTime=c/vt1+(p[i]-c)/vt2;   //不加油的时间
                }
                //过站点时要分两种情况--一是加油,二是不加油
                if(j>0){    //考虑加油的情况
                     //1.加油时间上,加t秒
                     //2.提速时间上,减x秒
                     curTime=dp[i-1];
                     curTime+=t;
                    if(p[i]-p[i-1] > c){
                      curTime+=c/vt1+(p[i]-p[i-1]-c)/vt2;
                    }
                    else{
                      curTime+=(p[i]-p[i-1])/vt1;
                    }
                }
                if(curTime<minTime){     //然后再对两者进行比较
                    minTime=curTime;
                }
              }
              dp[i]=minTime; 
            }
            int Time= (int) (this.Length / vr);
            if(dp[this.n+1]<Time){
                System.out.println("What a pity rabbit!");
            }else{
                System.out.println("Good job,rabbit!");
            }
            iner.close();
            return true;
        }
        
        public test(int l,int x,int y,int z,int k,int m,int n){
          this.Length=l;
          this.n=x;this.vr=k;
          this.c=y;this.vt1=m;
          this.t=z;this.vt2=n;
          p=new double[this.n+2];
          dp=new double[this.n+2];
          p[0]=0;p[this.n+1]=l;
        }
    }
    
    
    
    public class rabbit{
        public static void main(String[] args) {
            test space=new test(100,3,5,1,10,20,5);
            space.Solution();
        }
    }
  • 相关阅读:
    多播委托与事件
    Linq 查询的演变过程
    Lamda表达式的前世今生
    微服务架构学习
    委托IL解析-----封装逻辑和代码复用
    ORM框架学习(四)
    ORM框架学习(三)
    Visual Studio 2010 旗舰版安装图解
    Microsoft SQL Server 2008 R2 中文安装说明
    3.0 面向对象 委托和事件 异常和错误
  • 原文地址:https://www.cnblogs.com/z2529827226/p/11624553.html
Copyright © 2011-2022 走看看