状态压缩 动态规划
DP[111.....1]=1表示所有鱼都在的几率为1
0代表已经挂了的,1代表没挂;
#include "stdio.h"
#define max 1<<18
double a[18][18],dp[max];
int bitcount(unsigned x)
{
int b;
for (b = 0; x != 0; x &= (x-1))
b++;
return b;
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
scanf("%lf",&a[i][j]);
}
//printf("%lf\n",a[n-1][n-1]);
int nn=(1<<n)-1;
dp[nn]=1;
for(int i=nn;i>0;i--){
int bit=bitcount(i);
if(bit==1)continue;
double p=2*dp[i]/bit/(bit-1);
for(int j=0;j<n;j++){
if((1<<j)&i){
for(int k=0;k<n;k++)
if(i&(1<<k)){
dp[i^(1<<k)] += p*a[j][k];
}
}
}
}
for(int i=0;i<n;i++){
printf("%.6f ",dp[(1<<i)]);
}
return 0;
}