前三题水题,直接来到第四题
D-Talk
官方题解:
这里说下我的推法,个人感觉比官方题解容易懂
设dp[i]为从i出发到达n+1的期望步数
那么根据题意推出下面这个公式:
pi的概率成功 所以是乘上f(i+1)+1 这个+1是走了一步,(1-pi)的概率倒退一步
继续化简 把f[i+1]拿到一边去:
去掉负数:
去掉括号化简:
分开后:
化简得跟官方有点差异,因为官方的dp是正着推的,我是逆着推的,我的答案就是负数,取个绝对值就好了。
我的代码绝对和公式一致的。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int n;
double a[N],d[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%lf",&a[i]);
for(int i=1;i<=n;i++)
d[i+1]=d[i-1]-(1.0/a[i])+(d[i]-d[i-1])/a[i];
d[n+1]=abs(d[n+1]);
printf("%.3lf\n",d[n+1]);
return 0;
}