说这个是动态规划的经典题目,真是好难啊。想不通,还是参考了好多人的,哎,以后还要好好练练。
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的位置会影响结果的。