zoukankan      html  css  js  c++  java
  • CF16E Fish(状压+期望dp)

    [传送门[(https://www.luogu.org/problemnew/show/CF16E)

    解题思路

      比较简单的状压+期望。设(f[S])表示(S)这个状态的期望,转移时挑两条活着的鱼打架。时间复杂度(O(2^n*n^2))

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    
    using namespace std;
    const int MAXN = 19;
    
    double a[MAXN][MAXN],f[1<<MAXN],ans[MAXN];
    int n;
    
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++) scanf("%lf",&a[i][j]);
        f[(1<<n)-1]=1.0;int now;
        for(int S=(1<<n)-1;S;S--)if(f[S]){
            now=__builtin_popcount(S);
            if(now==1){
                for(int i=1;i<=n;i++) if((1<<(i-1))&S){
                    ans[i]=f[S];break;
                }
                continue;
            }
            for(int i=1;i<=n;i++)if((1<<(i-1))&S)
                for(int j=i+1;j<=n;j++)if((1<<(j-1))&S){
                    f[S^(1<<(j-1))]+=f[S]*a[i][j]/(now*(now-1)/2);
                    f[S^(1<<(i-1))]+=f[S]*a[j][i]/(now*(now-1)/2);
                }
        }
        for(int i=1;i<=n;i++) printf("%.6lf ",ans[i]);
        return 0;
    }
    
    
  • 相关阅读:
    java 连接SQL Server
    JAVA泛型
    JAVA 数组遍历
    JAVA注释
    Python正则表达式
    python练习题二
    Python函数
    Python练习题一
    重学python-列表的一些操作
    重学python-python-pandas库
  • 原文地址:https://www.cnblogs.com/sdfzsyq/p/10050891.html
Copyright © 2011-2022 走看看