題目連結: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;
}