bzoj4318OSU!*

bzoj4318OSU!

题意:

一个长度为n的序列,每个元素有一定概率是1,不是1就是0。连续x个1可以贡献x^3的分数,问期望分数。

题解:

期望dp。f1[i]表示连续到i的期望长度,f2[i]表示期望的f1[i]^2,f3[i]表示期望的f1[i]^3。

f1[i]=(f1[i-1]+1)*p,f2[i]=(f2[i-1]+2*f1[i-1]+1)*p,f3[i]=f3[i-1]+3*f2[i-1]+3*f1[i-1]+1。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define inc(i,j,k) for(int i=j;i<=k;i++)
 5 #define maxn 100010
 6 using namespace std;
 7
 8 double f1[maxn],f2[maxn],f3[maxn]; int n;
 9 int main(){
10     scanf("%d",&n);
11     inc(i,1,n){
12         double a; scanf("%lf",&a);
13         f1[i]=(f1[i-1]+1)*a; f2[i]=(f2[i-1]+2*f1[i-1]+1)*a;
14         f3[i]=f3[i-1]+(f1[i-1]*3+f2[i-1]*3+1)*a;
15     }
16     printf("%.1lf",f3[n]); return 0;
17 }

20160812

时间: 2024-11-05 17:31:49

bzoj4318OSU!*的相关文章

【概率DP】BZOJ4318-OSU!

[题目大意] 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串.在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释) 现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数. [思路] http://blog.csdn.net/popoqqq/article/details/49512533 假如这个01串使确定的,考虑每新增一个位置,如果这个位置是0

bzoj4318OSU &amp;tyvj1952 Easy

之前做tyvj1952Easy(给定一个序列,每个位置有一定的概率是1或0,求极长连续1的长度平方期望),用的做法是求出"全1子串的期望个数".假如每一段极长连续1分别长x1,x2,x3-要求的答案为sigma{xi^2},全1子串的期望个数即为sigma{(xi+1)*xi/2},和sigma{xi}的期望(即1的个数的期望)加加减减就出来答案了. Bzoj4318的题意同上,不过要求立方和的期望.做法是分别考虑每个位置的期望贡献. 即:111后加一个1的贡献为4*4-3*3=7,1