程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 4336 Card Collector 容斥原理 多校聯合賽(四) 第六題

hdu 4336 Card Collector 容斥原理 多校聯合賽(四) 第六題

編輯:C++入門知識

看了hdu上的題解之後了解 原來是容斥原理,順便復習了一下
每個bag中什麼卡的機會都有,說明每個概率都會有交集,這樣就會想到一個圖,就是右下面那個
然後就這哥公式了,還是很好理解的


   
下面是我的一個dfs
[cpp] 
#include<iostream> 
#include<cstdio> 
using namespace std; 
double s;  int n,vis[25]; 
double a[25]; 
void dfs(int k,double sum,int cou,int j){ 
    if(cou==k){ 
        s+=1/sum; 
        return ; 
    } 
    for(int i=j;i<=n;i++){ 
            sum+=a[i]; 
            cou++; 
            dfs(k,sum,cou,i+1); 
            cou--; 
            sum-=a[i]; 
    } 
    return ; 

int main(){ 
    while(~scanf("%d",&n)){ 
        for(int i=1;i<=n;i++){ 
            scanf("%lf",&a[i]); 
        } 
        double sum=0; 
        for(int i=1;i<=n;i++) 
            sum+=(1/a[i]); 
        for(int i=2;i<=n;i++){ 
            s=0; 
            dfs(i,0,0,1); 
            if(i%2==0) sum+=(-1)*s; 
            else sum+=s; 
        } www.2cto.com
        printf("%lf\n",sum); 
    } 

作者:youngyangyang04
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved