zoukankan      html  css  js  c++  java
  • hdu 4336 Card Collector

    有n种卡片,概率分别为p1...pn,p1+...+pn<=1

    每个袋子最多一张卡片,也可以没有

    这题巧妙的用到了整数的二进制

     1 #include<iostream>
     2 #include<string>
     3 #include<cstdio>
     4 #include<vector>
     5 #include<queue>
     6 #include<stack>
     7 #include<algorithm>
     8 #include<cstring>
     9 #include<stdlib.h>
    10 using namespace std;
    11 #define pb push_back
    12 double dp[1<<21],p[22];
    13 int main(){
    14     int n;
    15     while(cin>>n){
    16         for(int i=0;i<n;i++)
    17             scanf("%lf",&p[i]);
    18         dp[(1<<n)-1]=0;
    19         for(int i=(1<<n)-2;i>=0;i--){
    20             double tmp=0;
    21             dp[i]=1;
    22             for(int j=0;j<n;j++){
    23                 if(i&(1<<j)) continue; //i转化成二进制后,从右边开始数第j位是否为1
    24                 dp[i]+=dp[i|(1<<j)]*p[j];
    25                 tmp+=p[j];
    26             }
    27 
    28             dp[i]/=tmp;
    29         }
    30         printf("%.6lf
    ",dp[0]);
    31     }
    32 }
  • 相关阅读:
    css定位
    盒子模型
    操作边框的属性
    操作表格的属性
    常用css样式
    选择器
    编写css代码的方式
    javascript DOM 共同父节点
    最大子段和问题
    regexp 正则表达式
  • 原文地址:https://www.cnblogs.com/ainixu1314/p/3883560.html
Copyright © 2011-2022 走看看