PKUWC2018 隨機演算法

2022-02-05 12:03:24 字數 795 閱讀 1849

題意:

給定乙個圖(n<=20),定義乙個求最大獨立集的隨機化演算法

產生乙個排列,依次加入,能加入就加入

求得到最大獨立集的概率

本質就是計數題

每個點有三種狀態:考慮過且在獨立集中,考慮過未在獨立集中,未考慮

本來在集合裡的點不能知道有哪些,而且不能加入的點的排列也不好確定。

乙個好的方法是:把考慮過的點放在一起

然後在加入乙個點的時候,把其他不能加入的點都考慮上,並處理方案數。

設f[i][s]表示,獨立集大小為i,不能再選擇的點集合是s的方案數

每次選擇乙個能加入的點j,然後更新能選擇的集合和集合大小,順便處理排除掉的點的方案數

就是乙個排列,其實就是把後面尚未考慮的位置加入一下,

注意這裡不用考慮j的位置,j位置欽定為從前往後第乙個能選擇的位置

i從n往下找到第乙個方案數不是0的f[k][全集]

最後乘上n!的逆元即可

o(n^2*2^n)傳說可過

對於不可以選擇的集合s,對應的最大獨立集確定

mxs記錄s集合最大獨立集

所以類似最短路條數,mxs更新的時候,把方案數設成0

這樣也能求出最大獨立集方案數。

o(n*2^n)

思路有點類似某次模擬賽t3,我在加入乙個數的時候,就把能產生的貢獻和影響都計算上

因為只有在列舉這個轉移的時候才知道加入的哪個點,這樣不用考慮加入進去的點都是誰了。

也方便處理不能選擇的那些點的排列。

(有了第二種做法,一般的20個點的最大獨立集也可以做了,20個點的最大獨立集方案數也可以求)

PKUWC2018 隨機演算法

題目 思博狀壓寫不出是不是沒救了呀 首先我們直接狀壓當前最大獨立集的大小顯然是不對的,因為我們的答案還和我們考慮的順序有關 我們發現最大獨立集的個數好像不是很多,可能是 o n 級別的,於是我們考慮從這個方面入手 我們求出所有的最大獨立集,考慮求出有多少種考慮順序能夠恰好得到這個最大獨立集 設當前已...

pkuwc2018 隨機演算法

我們考慮用狀壓dp來解決這一道題 設 f i s 表示當前排列的前i位所構成的最大獨立集恰好為s的方案數 我們考慮用 f i s 推出 f i 1 s 的值 那麼我們有兩種擴充套件的方法,一種是在第 i 1 位,加入乙個數 j 滿足 s j 且 s j 為最大獨立集。這種情況,相當於在原本的最大獨立...

PKUWC2018 隨機演算法

我們知道,求任意圖的最大獨立集是一類np完全問題,目前還沒有準確的多項式演算法,但是有許多多項式複雜度的近似演算法。例如,小 c 常用的一種演算法是 1.對於乙個 n 個點的無向圖,先等概率隨機乙個 1 ldots n 的排列 p 1 ldots n 2.維護答案集合 s 一開始 s 為空集,之後按...