题目链接:蜗牛
import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();int[] x=new int[n+1];for(int i=1;i<=n;i++){x[i]=scanner.nextInt();}int[] a=new int[n+1];int[] b=new int[n+2];for(int i=1;i<=n-1;i++){a[i]=scanner.nextInt();//表示第i个柱子的传送起点高度b[i+1]=scanner.nextInt();//表示第i个柱子被传送后到的高度}double[][] dp=new double[n+1][2];//dp[i][0]表示第i个节点的时间,dp[i][1]表示到达第i个传送门的时间dp[1][0]=x[1];dp[1][1]=x[1]+a[1]/0.7;for(int i=2;i<=n;i++){if(a[i]>=b[i]){//第i个传送门位置=min(上一个节点所需的时间然后直接走到下一个柱子,再爬上传送门的时间,上一个传送门时间,然后直接传送过来,在判断当前传送到的高度和该柱子可以传送的高度)dp[i][1]=Math.min(dp[i-1][0]+x[i]-x[i-1]+a[i]/0.7,dp[i-1][1]+(a[i]-b[i])/0.7);}else{dp[i][1]=Math.min(dp[i-1][0]+x[i]-x[i-1]+a[i]/0.7,dp[i-1][1]+(b[i]-a[i])/1.3);}//第i个节点时间=min(上一个节点所需时间,加上直接走过来的时间,上一个传送门的时间,然后传送过来,在计算下落到高度0的时间)dp[i][0]=Math.min(dp[i-1][1]+b[i]/1.3,dp[i-1][0]+x[i]-x[i-1]);}System.out.printf("%.2f",dp[n][0]);} }