using namespace std;
const int N=100001;
int n,a[N],b[N],x[N];
double f[N][2];
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>x[i];
for(int i=1;i<=n-1;i++) {
cin>>a[i]>>b[i];
}
f[1][0]=x[1];
f[1][1]=x[1]+a[1]/0.7;
for(int i=2;i<=n;i++){
f[i][0]=f[i-1][0]+x[i]-x[i-1];
f[i][0]=min(f[i][0],f[i-1][1]+b[i-1]/1.3);
f[i][1]=f[i][0]+a[i]/0.7;
f[i][1]= min(f[i][0]+a[i]/0.7,f[i-1][1]+abs(a[i]-b[i-1])/(a[i]>b[i-1]?0.7:1.3));
}
printf("%.2lf", f[n][0]);
}
/* f[i][0]表示到第i根棍的底部所用时间
f[i][1]表示到第i根棍的传送门位置所用时间
1.在坐标轴上走:f[i][0]=f[i-1][0]+x[i]-x[i-1];
2.做传送门: f[i][0]=f[i-1][1]+b[i-1]/1.3;
1.在坐标轴上走:f[i][1]=f[i-1][0]+x[i]-x[i-1]+a[i]/0.7=f[i][0]+a[i]/0.7;
2.做传送门: f[i][1]=f[i-1][1]+(a[i]-b[i-1])/0.7或 f[i-1][1]+(b[i-1]-a[i])/1.3;
即 f[i][1]= f[i-1][1]+abs(a[i]-b[i-1])/(a[i]>b[i-1]?0.7:1.3)
*/
0 回复
0 转发
0 喜欢
3 阅读



