題意:給出n個箱子。每個箱子上都有鎖。一把鑰匙只能開一把鎖,一把鎖只有乙個鑰匙。當然,對於有些沒法用鑰匙開的箱子,我們必須暴力開啟。給出每個箱子中鑰匙的數目和具體能開那個箱子,求暴力開箱子的數目的期望,使所有的箱子被開啟。
思路:很像xiaodaobc的某道開箱子的題。但是因為那道題是每個箱子會隨機的放一把鑰匙。這樣得到的期望為調和級數。
這道題也類似,我們首先得到:暴力開啟這個箱子,能夠開那些箱子。這個可以用bitset來進行狀態壓縮。
然後,對於每個箱子,我們考慮有多少種方法,使:暴力開啟某些箱子,同時能開啟這個箱子。而,暴力開這個箱子的期望就是方案數的倒數。然後我們對開每個箱子的期望求和就是最終的開啟所有箱子暴力開箱子的數目的期望。
#include #include #include #include using namespace std;
const int max = 1010;
int t,k,n,num;
bitsetkey[max];
int main(void)
for(int i = 0; i < n; ++i)
}for(int j = 0; j < n; ++j)
for(int i = 0; i < n; ++i)
if(key[i][j])
key[i] |= key[j];
double ans = 0.0;
for(int j = 0; j < n; ++j)
printf("case #%d: %.5f\n",cas++,ans);
}return 0;
}
HDU 5036 Explosion 概率 期望
題意 給出n個箱子。每個箱子上都有鎖。一把鑰匙只能開一把鎖,一把鎖只有乙個鑰匙。當然,對於有些沒法用鑰匙開的箱子,我們必須暴力開啟。給出每個箱子中鑰匙的數目和具體能開那個箱子,求暴力開箱子的數目的期望,使所有的箱子被開啟。思路 很像xiaodaobc的某道開箱子的題。但是因為那道題是每個箱子會隨機的...
hdu5036 Explosion 傳遞閉包
大哲哥的講課內容 根據期望的線性性,得到總期望為各個點被轟的概率 不會證,好像是這樣吧 傳遞閉包解決出每個點的祖先 能到達它的點 就能算概率了 bitset能貢獻1 w的複雜度,而且導致floyd只剩下兩個for了 一點都不像經典floyd 1 include 2 using namespace s...
5036 尋找最大質因數(資料加強版)
時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解給出n個數字,試求質因數最大的數字。輸入描述 input description 第一行,乙個整數n,表示數字個數。接下來n行,每行乙個整數ai,表示給出的數字。輸出描述 output description 乙個整數,表示質因...