2059龟兔赛跑

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34188112/article/details/54089548
说这个是动态规划的经典题目,真是好难啊。想不通,还是参考了好多人的,哎,以后还要好好练练。
import java.util.Scanner;
//找出乌龟每一次的最短时间 比每个都遍历一遍强很多

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
int l,n,c,t,vr,vt1,vt2,w=1;//vt1乌龟开电动车的速度,vt2乌龟脚蹬电动车的速度
double rr=0.0;double tt=0.0;
l=scanner.nextInt();
n=scanner.nextInt();
c=scanner.nextInt();
t=scanner.nextInt();
vr=scanner.nextInt();
vt1=scanner.nextInt();
vt2=scanner.nextInt();
int ns[]=new int[n+2];
double cs[]=new double[n+2];//装到充电点的时间,最短的包括起点,终点
rr=l*1.0/vr;
for(int i=1;i
ns[i]=scanner.nextInt();
}
ns[n+1]=l;//存储终点的距离
for(int i=1;i
cs[i]=0xFFFFF;
for(int j=0;j
if(ns[i]-ns[j]>c){
tt=c*1.0/ vt1+(ns[i]-ns[j]-c)*1.0/ vt2;
}else{
tt=(ns[i]-ns[j])*1.0/ vt1;
}
if(j>0){//从一个点到另一个点 表示充电出发了
tt+=t;
}
tt+=cs[j];//cs是从起点到此充电点的总时间,之前点的最短时间已经记录了。
cs[i]= cs[i] > tt ? tt : cs[i];//tt表示当前这种选择达到此充电点的时间
}
}//
if(cs[n+1]
System.out.println("What a pity rabbit!");
}else{
System.out.println("Good job,rabbit!");
}
  }
}

}
我有个坑了很久是因为int转double
int a=3,b=5,c=9;
double w=0.0;
w=(a+b)/c*1.0;   //0.0
System.out.println(w);
w=(a+b)*1.0/c;  //0.88888888
System.out.println(w);



1.0的位置会影响结果的。
展开阅读全文

没有更多推荐了,返回首页