POJ 3071 Football(概率DP)

weixin_33816946發表於2019-01-08

題目連結:http://poj.org/problem?id=3071

題意:2^n個球隊比賽,採用淘汰賽。Pij表示i勝j的概率。求n輪之後,哪個隊勝出的概率最大?

思路:f[i][j]表示i隊在j輪後勝出的概率,f[i][j]=sum(f[i][j-1]*f[k][j-1]*pjk)k為在第j輪i的可能對手。



double f[N][N],p[N][N];
int n;

int main()
{
    Rush(n)
    {
        if(n==-1) break;
        clr(f,0);
        int i,j,k,L,R;
        FOR0(i,(1<<n)) FOR0(j,(1<<n)) RD(p[i][j]);
        FOR0(i,(1<<n)) f[i][0]=1;
        FOR0(i,n) FOR0(j,(1<<n))
        {
            L=(j^(1<<i))>>i<<i;
            R=L+(1<<i)-1;
            FOR(k,L,R) f[j][i+1]+=f[j][i]*f[k][i]*p[j][k];
        }
        int ans=0;
        FOR0(i,(1<<n)) if(f[i][n]>f[ans][n]) ans=i;
        PR(ans+1);
    }
    return 0;
}

  

相關文章