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