近期總結

7.31:
1、(p-2)!%p=1  (p爲質數) 感性證明:2~p-2中每個數必然存在它的逆元,互相抵消爲1

2、費用流建圖時,要讓一個點只能經過一次,且有相關費用,可以將它拆成兩個點,用中間的邊(流量1)來限制(經過這條邊才表示真正經過這個點)。

3、最小最大想二分

8.1:

1、最長反鏈長度(即一個有向無環圖中,選出最多的點,使得點互不到達)=最小鏈覆蓋(用最小數量的鏈,覆蓋整個圖,使得每個點至少經過一次)

最小鏈覆蓋怎麼求呢?先把它轉化爲最小路徑覆蓋(定義類似,但保證每個點嚴格經過一次,轉化方法就是n^2或n^3(直接floyed)搞出每個點能直接或間接到達的點,重新連邊),然後拆點做匈牙利(即每個點都可以作爲起點一次和終點一次的匈牙利),最小路徑覆蓋=點數-最大匹配數 (感性理解:一開始假裝每個點都是一條路徑,然後每找到一個匹配,就相當於將兩條路徑合併爲一條,所以找到多少個匹配,總點數就要減去多少,得到答案。

擴展:給定n個點,已知選了一個點i,就不能選ai集合中的所有點,求最多能選多少個點?

(給對應關係連邊,將問題轉化爲求最長反鏈長度,按照上面即可

2、給出n個位置,每個位置上有數字a1~n,每次可以將任意一個位置上的數字減去1,但不能連續兩次減同一個位置的數字,求將所有位置的數字減至0的方案數。

轉化,每次減去某個位置的數,相當於在一個序列中記下該位置,要使序列中相鄰的位置不同。考慮dp,設f[i][j]表示當前處理到第i個位置,得到j個非法空(即連續的同個位置在序列中出現) ,枚舉p,q,分別表示當前把i分配給p個空,包含q個非法空區域在內

那麼轉移到j-q+a[i]-p(刪去了q個非法空,a[i]-p的部分就是新的非法空)

方程f[i][j-q+a[i]-p]+=f[i-1][j]*C(j,q)*C(s-j,p-q)*C(a[i]-1,p-1) (j個非法空中取q個,s-j個合法空中取p-q,將a[i]個數分配到p個空中)

寫得有點凌亂 建議看原題http://120.77.82.93/senior/#main/show/3424

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章