• BZOJ 1778 [Usaco2010 Hol]Dotp 驱逐猪猡 ——期望DP


    思路和BZOJ 博物馆很像。

    同样是高斯消元

    #include <map>
    #include <ctime>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    #define F(i,j,k) for (int i=j;i<=k;++i)
    #define D(i,j,k) for (int i=j;i>=k;--i)
    #define maxn 100005
    #define eps 1e-9 
     
    double a[350][350];
    double ans[350]; 
    int n,m,p,q;
    int h[maxn],to[maxn],ne[maxn],en=0,du[maxn];
     
    void add(int a,int b)
    {to[en]=b;ne[en]=h[a];h[a]=en++;du[a]++;}
     
    void Gauss()
    {
        F(i,1,n)
        {
            int tmp=i;
            F(j,i+1,n) if (fabs(a[tmp][i])<fabs(a[j][i])) tmp=j;
            if (tmp!=i) F(j,i,n+1) swap(a[tmp][j],a[i][j]);
            F(j,i+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];
            }
        }
        D(i,n,1)
        {
            F(j,i+1,n)
                a[i][n+1]-=a[i][j]*ans[j];
            ans[i]=a[i][n+1]/a[i][i];
        }
    }
     
    int main()
    {
        scanf("%d%d%d%d",&n,&m,&p,&q);
        a[1][n+1]=1.0*p/q;
        F(i,1,m)
        {
            int x,y;scanf("%d%d",&x,&y);
            du[x]++;du[y]++;
            a[x][y]+=1.0; a[y][x]+=1.0;
        }
        F(i,1,n) F(j,1,n) if (du[j]) a[i][j]/=(double)du[j];
        F(i,1,n) F(j,1,n) a[i][j]*=1.0*p/q-1;
        F(i,1,n) a[i][i]+=1;
        Gauss();
        F(i,1,n) printf("%.9f
    ",ans[i]);
    }
    

      

  • 相关阅读:
    Python中修改字符串的四种方法
    一些有用的资源分享(工具+电子书)
    什么是DFX测试
    测试笔,测试纸杯
    测试用例八大要素
    软件测试的16种测试类型
    python作业(二)
    python作业(一)
    菜鸟学python(第一天)函数及模块使用
    [Spring MVC]
  • 原文地址:https://www.cnblogs.com/SfailSth/p/6669920.html
Copyright © 2020-2023  润新知