HDU - 4336 Card Collector(概率dp)

来源:互联网 发布:跑跑卡丁车淘宝卖号 编辑:程序博客网 时间:2024/05/16 13:48
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <string>using namespace std;double d[(1<<21)+100], p[22];int n;void dp(){    d[(1<<n)-1]=0;    for(int i=(1<<n)-2; i>=0; i--)    {        d[i]=0;        double pk=0;        for(int j=0; j<n; j++)        {            if(!((1<<j)&i))            {                d[i]+=d[i^(1<<j)]*p[j];                pk+=p[j];            }        }        d[i]=(d[i]+1.0)/pk;    }}int main(){    while(~scanf("%d", &n))    {        for(int i=0; i<n; i++)            scanf("%lf", &p[i]);        dp();        printf("%.4lf\n", d[0]);    }    return 0;}

0 0
原创粉丝点击