题解分享
题解分享简介
蜗牛(编程题) - 题解
```
#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
8
蜗牛(编程题) - 题解
```
#include
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



