@xiaoziyao
        
        2020-06-16T12:46:14.000000Z
        字数 967
        阅读 1574
    解题报告
题意:给定一个序列,每一个位置为的几率为,长度为的极长序列的贡献为,求期望贡献。 
数据范围:
很容易发现这是一道概率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!
