zoukankan      html  css  js  c++  java
  • BZOJ 3150 [Ctsc2013]猴子 ——期望DP 高斯消元

    一堆牌的期望等于每张牌的期望值和。

    考虑三个人的游戏即可得到。

    然后每张牌遇到另外一张的概率相同,然后就可以列方程求解了。

    #include <cmath>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    int n,m;
    #define maxn 105
    #define F(i,j,k) for (int i=j;i<=k;++i)
    double p[maxn][maxn],a[maxn][maxn];
    char s[maxn];
    void Gauss()
    {
        F(i,1,n)
        {
            int tmp=i; F(j,i+1,n) if (fabs(a[j][i])>fabs(a[tmp][i])) tmp=j;
            F(j,1,n+1) swap(a[tmp][j],a[i][j]);
            F(j,1,n) if (j!=i)
            {
                double t=a[j][i]/a[i][i];
                F(k,i,n+1) a[j][k]-=t*a[i][k];
            }
        }
        F(i,1,n) a[i][n+1]/=a[i][i];
    }
    int main()
    {
        scanf("%d%d",&n,&m);//printf("n is %d m is %d
    ",n,m);
        F(i,1,n) F(j,1,n) scanf("%lf",&p[i][j]);
        F(i,1,n-1)
        {
            a[i][i]=1-n;
            F(j,1,n) if (i!=j) a[i][j]+=p[i][j],a[i][i]+=p[i][j];
        }
        F(i,1,n) a[n][i]=1; a[n][n+1]=1;
        Gauss();
        double ans;
        F(i,1,m)
        {
            scanf("%s",s+1);ans=0;
            F(j,1,n) if (s[j]=='1') ans+=a[j][n+1];
            printf("%.8lf
    ",ans);
        }
    }
    

      

  • 相关阅读:
    vue学习之router
    vue学习之组件
    xshell操作
    Webstorm快捷操作
    javascript判断节点是否在dom
    影子节点 shadowDOM
    虚拟节点操作——DocumentFragment
    理解浏览器的历史记录
    浏览器渲染
    web请求流程
  • 原文地址:https://www.cnblogs.com/SfailSth/p/6813609.html
Copyright © 2011-2022 走看看