CodeForces - 16E Fish【状压DP】

    科技2022-08-26  104

    题目链接:https://codeforces.com/contest/16/problem/E

    #include <iostream> using namespace std; typedef double db; static const int MAXN=20; db dp[1<<MAXN],a[MAXN][MAXN]; int n; int main() { scanf("%d",&n); for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%lf",&a[i][j]); dp[(1<<n)-1]=1; for(int i=(1<<n)-1;i;i--) { int cnt=0; for(int j=0;j<n;j++) if(i>>j&1) cnt++; if(cnt<2) continue; db d=2.0/cnt/(cnt-1); for(int j=0;j<n;j++) if(i>>j&1) for(int k=0;k<n;k++) if((i>>k&1) && j!=k) dp[i-(1<<j)]+=d*dp[i]*a[k][j]; } for(int i=0;i<n;i++) printf("%.6lf ",dp[1<<i]); return 0; }
    Processed: 0.012, SQL: 9