zoukankan      html  css  js  c++  java
  • [bzoj4318]OSU!

    题目大意:有一个长度为 $n$ 的 $01$ 序列,每一段极大的连续 $1$ 的价值是 $L^3$(长度为 $L$)。现在给定 $n$ 个实数表示该位为 $1$ 的概率,求期望总价值。

    题解:

    令$f_i$为到第$i$位的答案,$a_i$为到第$i$位前连续一段$1$的个数的期望,$b_i$为到第$i$位前连续一段$1$的个数的平方的期望,$x_i$为第$i$位为$1$的概率

    $ herefore DP$方程如下:

    $$a_i=(a_{i-1}+1) imes x_i+0 imes (1-x_i)$$

    $$egin{align*}
    b_i&=(a_{i-1}+1)^2 imes x_i+0 imes (1-x_i)\
    &=(a_{i-1}^2+2cdot a{i-1}+1) imes x_i+0 imes (i-x_i)\
    &=(b_{i-1}+2cdot a{i-1}+1) imes x_i+0 imes (i-x_i)\
    end{align*}$$

    $$egin{align*}
    f_i&=[f_{i-1}-a{i-1}^3+(a{i-1}+1)^3] imes x_i+f_{i-1} imes(1-x_i)\
    &=(f_{i-1}+3cdot a_{i-1}^2+3cdot a_{i-1}+1) imes x_i+f_{i-1} imes(1-x_i)\
    &=(f_{i-1}+3cdot b_{i-1}+3cdot a_{i-1}+1) imes x_i+f_{i-1} imes(1-x_i)
    end{align*}$$

     然后发现$f_i$只和$f_{i-1},b_{i-1},a_{i-1},x_i$有关,$b_i$只和$b_{i-1},a_{i-1},x_i$有关,$a_i$只和$a_{i-1},x_i$有关,所以可以滚掉

    卡点:

    C++ Code:

    #include <cstdio>
    using namespace std;
    int n;
    double x, f, a, b;
    int main() {
    	scanf("%d", &n);
    	for (int i = 1; i <= n; i++) {
    		scanf("%lf", &x);
    		f = f * (1 - x) + (f + 3 * b + 3 * a + 1) * x;
    		b = (b + 2 * a + 1) * x;
    		a = (a + 1) * x;
    	}
    	printf("%.1lf
    ", f);
    	return 0;
    }
    

      

  • 相关阅读:
    驱动Makefile
    ioremap
    file结构体
    Python基础-语法知识
    企业运营对 DevOps 的「傲慢与偏见」
    漂亮得不像实力派!
    如何用 OneAPM 优化你的 Node.js 应用?
    全球说:要给 OneAlert 点100个赞
    DevOps 和技术债务偿还自动化
    PHP 性能分析与实验(二)——PHP 性能的微观分析
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/9466952.html
Copyright © 2011-2022 走看看