zoukankan      html  css  js  c++  java
  • 传递闭包+求概率——列项相消法lightoj1321好题

    主要是要想到边与边的通过概率是独立的,所以先求出最终的概率,然后用推出的公式求总期望即可

    最终概率E[0][n-1],可以用传递闭包来做

    裂项相消法都不会了。。

    /*
    闭包上推期望
    每条边都具有独立性,算出每条边上成功通过的期望 Ei=2K/pi(裂项相消法)
    然后再通过佛洛依德进行传递边之间的关系即可
    直接求期望比较麻烦,先求最大的概率 
    */
    #include<bits/stdc++.h>
    using namespace std;
    int n,m,S,K,t;
    double mp[120][120];//概率矩阵 
    
    void floyed(){
        for(int i=0;i<n;i++)mp[i][i]=1;
        for(int k=0;k<n;k++)
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    mp[i][j]=max(mp[i][j],mp[i][k]*mp[k][j]); 
    }
    
    int main(){
        cin>>t;
        for(int tt=1;tt<=t;tt++){
            memset(mp,0,sizeof mp);
            cin>>n>>m>>S>>K;
            for(int i=1;i<=m;i++){
                int u,v;double w;
                cin>>u>>v>>w;
                mp[u][v]=mp[v][u]=w/100;//通过一条边的概率 
            }
            floyed();
            printf("Case %d: %.10lf
    ",tt,2.0*S*K/mp[0][n-1]);
        }
    } 
  • 相关阅读:
    cf 427D Match & Catch 后缀数组
    cf 244c Checkposts 强连通分量
    NSPredicate的学习
    正则表达式
    NavigationBar &UINavigationItem& toolbar方法汇总
    区块股票数量
    吃什么
    selenium
    laravel5
    vim golang dev
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10848376.html
Copyright © 2011-2022 走看看