@xiaoziyao
2020-06-16T20:46:14.000000Z
字数 967
阅读 1129
解题报告
题意:给定一个序列,每一个位置为的几率为,长度为的极长序列的贡献为,求期望贡献。
数据范围:
很容易发现这是一道概率dp。
我们考虑以为结尾的极长序列长度为,则可以分两种情况讨论的转移:
故
我们求得了位置的期望长度为后,可以考虑转移答案:
首先,在这个极长序列之前的期望贡献显然不需要考虑,我们只需要考虑以结尾的极长序列:
1. 若当前位置为,概率为,则在位置时,期望长度为,则期望贡献为;在位置时,期望长度为,则期望贡献为。这两个式子相减则为答案:;
2. 若当前位置为,概率为,则无以结尾的极长序列,无贡献。
故
记得保留位小数。
#include<stdio.h>
const int maxn=100005;
int i,j,k,m,n;
double len[maxn],ans[maxn];
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++){
double p;
scanf("%lf",&p);
len[i]=(len[i-1]+1.0)*p+0.0*(1-p);
ans[i]=ans[i-1]+(2.0*len[i-1]+1.0)*p+0.0*(1-p);
}
printf("%.15lf",ans[n]);
return 0;
}
本题弱化版:P1365 WJMZBMR打osu! / Easy
本题扩展版:P1654 OSU!