zoukankan      html  css  js  c++  java
  • 【JLOI 2012】时间流逝(期望,树上高斯消元)

    题目链接

     这是一道传统的期望题,可是有一些套路值得我去掌握。

    我们用$s$来表示一种状态,就是当前拥有的能量圈,是一个正整数拆分的形式。

    用$f_{s}$表示如果遇到果冻鱼后丢掉了最小的能量圈后的状态,对于每一个$s$,$f_{s}$是唯一的。

    用$v_{s}$表示随机得到了能量圈后的状态,假设目前还有$mi$种能量圈可选,那就有$mi$种转移。

    由于$f_{s}$的能量圈个数一定小于$s$的能量圈个数,所以这是一个树形结构。

    可以简单写出$s$的期望的方程式:

    $E_{s} = 1 + p * E_{f_{s}} + (1 - p) * frac{1}{mi} * sum E_{v_{s}}$。

     这里我们发现,当$s$的和大于阈值的时候,$E_{s} = 0$,也就是叶子的贡献和其父亲是没有关系的。

    这里有一个套路,就是由于它是一个树,每一个$E_{s}$都可以表示成$k_{s} * E_{f_{s}} + b_{s}$的形式。

    于是把上式中的$E_{v_{s}}$展开成$k_{v_{s}} * E_{s} + b_{v_{s}}$。

    我们设$g = (1 - p) * frac{1}{mi}, nk = sum k_{v_{s}}, nb = sum b_{v_{s}}$,移项可得:

    $(1 - g * nk) * E_{s} = 1 + p * E_{f_{s}} + g * nb$

    $E_{s} = frac{p}{1 - g * nk} E_{f_{s}} + frac{1 + g * nb}{1 - g * nk}$

     所以得到$k_{s} = frac{p}{1 - g * nk}, b_{s} = frac{1 + g * nb}{1 - g * nk}$。

    叶子的$k,b$都是$0$,于是我们只要从叶子向上推就可以了,能算出每个点的$k,b$,因为它只和儿子有关,而根是没有父亲的,答案就是根节点的$b$。

    由于阈值不大,正整数拆分的形式不会太多,复杂度是合理的。

    $igodot$技巧&套路:

    • 树上高斯消元的特殊性质
    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    int n, t, a[53];
    double p;
    
    struct No { double k, b; };
    
    No Dfs(int s, int mi) {
      No re = (No){ 0, 0 };
      if (s > t) return re;
      double nk = 0, nb = 0;
      double np = s? p : 0, g = (1 - np) / mi;
      for (int i = 0; i < mi; ++i) {
        No so = Dfs(s + a[i], i + 1);
        nk += so.k, nb += so.b;
      }
      re.k = np / (1 - g * nk);
      re.b = (1 + g * nb) / (1 - g * nk);
      return re;
    }
    
    int main() {
      while (scanf("%lf%d%d", &p, &t, &n) == 3) {
        for (int i = 0; i < n; ++i)
          scanf("%d", &a[i]);
        sort(a, a + n);
        printf("%.3f
    ", Dfs(0, n).b);
      }
      return 0;
    }
    View Code
  • 相关阅读:
    洛谷3163 CQOI2014危桥 (最大流)
    UVA557 汉堡 Burger
    洛谷1950 长方形 (单调栈)
    洛谷3317 SDOI2014重建(高斯消元+期望)
    洛谷4035 JSOI2008球形空间产生器 (列柿子+高斯消元)
    test1
    test
    background
    bzoj1075
    bzoj1074
  • 原文地址:https://www.cnblogs.com/Dance-Of-Faith/p/9762728.html
Copyright © 2011-2022 走看看