直接dp即可.

#include <bits/stdc++.h>
using namespace std;
const int N=2e3,M=12;
double f[N][M];//第i个人在第j轮生出的概率. 
double F[N][N];//第i名战胜第j名的概率. 
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    int K=(1<<n);
    for(int i=1;i<=K;i++)
        for(int j=1;j<=K;j++)
        {
            int x;scanf("%d",&x);
            F[i][j]=(double)x/(double)100;
        }
    for(int i=1;i<=K;i++)
    {
        if(i&1) f[i][1]=F[i][i+1];
        else    f[i][1]=F[i][i-1];
    }
    for(int i=2;i<=n;i++)
    {
        int pos=(1<<i);
        for(int j=1;j<=K;j++)
        {
            for(int k=1;k<=K;k++)
            {
                if((j-1)/pos==(k-1)/pos)
                {
                    if((k-1)/(pos/2)!=(j-1)/(pos/2))
                    {
                        f[j][i]+=f[j][i-1]*f[k][i-1]*F[j][k];
                    }
                }
            }
        }
    }printf("%.10f\n",f[m][n]);
    return 0;
}