[Non] 踩地雷II
[Non] 踩地雷II
大意
从 \(1\) 这个位置开始走的期望步数。
思路
正推较为复杂,考虑倒退。
设 \(f[i]\) 为从第 \(i\) 个位置向后走出迷宫或者踩到地雷的期望步数。
那么我们有 \(f[i] = f[i + 1] \times p + f[i + 2] \times (1 - p) + 1\),那么直接倒退即可。
代码
#include<iostream>
using namespace std;
const int MAXN = 1e6 + 5;
int n;
double p;
int x[MAXN];
bool vis[MAXN];
double f[MAXN];
int main(){
while(cin >> n >> p){
for(int i = 1;i <= MAXN - 1;i ++) vis[i] = 0;
int maxx = 0;
for(int i = 1;i <= n;i ++){
cin >> x[i];
vis[x[i]] = 1;
maxx = max(maxx, x[i]);
}
for(int i = maxx;i >= 1;i --){
if(vis[i]) f[i] = 0;
else{
f[i] = p * f[i + 1] + (1 - p) * (f[i + 2]) + 1;
}
}
printf("%.7lf\n", f[1]);
}
return 0;
}
本文来自一名高中生,作者:To_Carpe_Diem

浙公网安备 33010602011771号