#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
double dp[100010][2];//dp数组记录用时
double arr[100010];//arr记录柱子x轴坐标
ll a[100010];//a记录起点
ll b[100010];//b记录终点
ll n;//柱子的数量
int main(){
//输入数据
cin>>n;
for(int i = 1; i <= n; i++){
cin>>arr[i];
}
for(int i = 1; i < n; i++){
cin>>a[i]>>b[i+1];
}
b[1] = 0; a[n] = 0;
//初始化dp
dp[1][0] = arr[1];
dp[1][1] = arr[1];
//填表
for(int i = 2; i <= n; i++){
//去第i个柱子走传送门
double dis = b[i-1] > a[i-1] ? (b[i-1]-a[i-1])/1.3 : (a[i-1]-b[i-1])/0.7;
dp[i][1] = min(dp[i-1][0] + a[i-1]/0.7 ,
dp[i-1][1] + dis);
//去第i个柱子不走传送门
dp[i][0] = min(dp[i-1][0] + arr[i] - arr[i-1] ,
dp[i-1][1] + arr[i] - arr[i-1] + b[i-1]/1.3);
//如果走传送门到终点,那就还要往下爬
if(i == n) dp[i][1] += b[i]/1.3;
//cout<<dp[i][0]<<' '<<dp[i][1]<<endl;
}
double ans = min(dp[n][1], dp[n][0]);
ans = round(ans*100)/100;
printf("%.2f",ans);
}
1 回复
0 转发
0 喜欢
7 阅读



