java 旅行家的预算_洛谷 P1016 旅行家的预算 Java解法
洛谷 P1016 旅行家的預(yù)算 Java解法
洛谷 P1016 旅行家的預(yù)算 Java解法
package com.two;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double D1 = sc.nextDouble();// 兩個城市之間的距離
double C = sc.nextDouble();// 汽車油箱中油的容量
double D2 = sc.nextDouble();// 每升汽油能行駛的距離
double P = sc.nextDouble();// 出發(fā)時每升汽油的價格
int N = sc.nextInt();// 沿途油站數(shù)
double distance[] = new double[N + 2];// 距離加油站的路程
double Pi[] = new double[N + 2]; // 每個加油站汽油的價格
double Maxd = D2 * C;// 目前油箱中油所能跑的最大距離
double money = 0;// 需要的錢
double surplus = 0;// 油箱中在到達(dá)了下一個加油站時油箱中的剩余油量
// 初始化距離和油價數(shù)組,且起點和終點也加進(jìn)去
distance[0] = 0;
Pi[0] = P;
distance[N + 1] = D1;
Pi[N + 1] = 0;
for (int i = 1; i <= N; i++) {
distance[i] = sc.nextDouble();
Pi[i] = sc.nextDouble();
}
// 當(dāng)油箱中油用完所能走的距離小于兩個加油站之間的距離時無解
for (int i = 0; i <= N; i++) {
if (distance[i + 1] - distance[i] > Maxd) {
System.out.println("No Solution");
return;
}
}
// 有解,開始遍歷每一個站點
int i = 0;
while (i <= N) {
int j;
for (j = i + 1; j <= N + 1; j++) {// 下一個
if (distance[j] - distance[i] > Maxd) {
j = j - 1;// 最大行駛距離無法到達(dá)j,因此最大到達(dá)j-1站點
break;
}
if (Pi[j] <= Pi[i]) {// 找到下一個更便宜的加油站
break;
}
}
// 更新油費:{距離下一站的路程/每升汽油能行駛的距離-油箱中的剩余油量)}*上一個加油站的油的價格 ;
// 錢=量*單價
if (Pi[j] <= Pi[i]) {// 找到下一個更便宜的加油站
money += ((distance[j] - distance[i]) / D2 - surplus) * Pi[i];
surplus = 0;// 更新到達(dá)下一個加油站后的剩余油量
} else {// 否則沒有找到比這個加油站便宜的油,則加滿油
money += (C - surplus) * Pi[i];// (油箱容量-剩余油)*每升油的單價
surplus = C - (distance[j] - distance[i]) / D2;// 剩余油量=(油箱容量-相鄰一站耗的油)/每升汽油行駛的距離
}
i = j;// 往下一個加油站行駛
}
System.out.println(String.format("%.2f", money));
}
}
洛谷 P1016 旅行家的預(yù)算 Java解法相關(guān)教程
總結(jié)
以上是生活随笔為你收集整理的java 旅行家的预算_洛谷 P1016 旅行家的预算 Java解法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDFS常用端口
- 下一篇: 配置frp报错start error: