bzoj3195 Jxoi2012 奇怪的道路

2022-05-01 06:54:09 字數 1741 閱讀 1375

time limit: 10 sec  memory limit: 128 mb

submit: 544  solved: 354

[submit][status][discuss]

小宇從歷史書上了解到乙個古老的文明。這個文明在各個方面高度發達,交通方面也不例外。考古學家已經知道,這個文明在全盛時期有n座城市,編號為1..n。m條道路連線在這些城市之間,每條道路將兩個城市連線起來,使得兩地的居民可以方便地來往。一對城市之間可能存在多條道路。

據史料記載,這個文明的交通網路滿足兩個奇怪的特徵。首先,這個文明崇拜數字k,所以對於任何一條道路,設它連線的兩個城市分別為u和v,則必定滿足1 <=|u - v| <= k。此外,任何乙個城市都與恰好偶數條道路相連(0也被認為是偶數)。不過,由於時間過於久遠,具體的交通網路我們已經無法得知了。小宇很好奇這n個城市之間究竟有多少種可能的連線方法,於是她向你求助。

方法數可能很大,你只需要輸出方法數模1000000007後的結果。

輸入共一行,為3個整數n,m,k。

輸出1個整數,表示方案數模1000000007後的結果。

【輸入樣例1】

3 4 1

【輸入樣例2】

4 3 3

【輸出樣例1】

3【輸出樣例2】

4【資料規模】

100%的資料滿足1<= n <= 30, 0 <= m <= 30, 1 <= k <= 8.

【題目說明】

兩種可能的連線方法不同當且僅當存在一對城市,它們間的道路數在兩種方法中不同。

在交通網路中,有可能存在兩個城市無法互相到達。

分析:狀壓dp好題!

這道題還是挺容易看出來用狀壓dp做的.因為是無向邊,誰連向誰不重要,重要的是這條邊連的兩個點是什麼.將點按照編號排序,那麼對於第i個點,只需要考慮連向它前面的k個點就可以了.

於是可以想到狀態表示:f[i][j][k]表示前i個點中連了j條邊,第i個點前k個點(包括點i)的狀態為k的方案數.k是乙個二進位制數,位上是0則表示那個點的度數為偶數,否則為奇數.最後合法的狀態就是0了.

這個狀態不好轉移,因為第i個點連向哪些點,連多少條邊不知道,怎麼辦,列舉?這其實是乙個分配問題,利用dp解決.再加一維:f[i][j][k][l]表示前i個點中連了j條邊,第i個點前k個點(包括點i)的狀態為k,i向之前的點連邊已經考慮到了第i-k+l個點的方案數.這樣就很好轉移了:如果i要繼續向第i-k+l個點連邊,則l不動就好了,轉移到j+1,k也要改變,否則轉移到l+1.

這道題的細節挺多的.考慮第i個點連邊不僅要考慮被連的點的度數的變化,還要考慮第i個點的度數的變化. 每次從i轉移到i+1時,要保證之前的狀態合法,也就是狀態左移的時候,要保證第i-k個點的度數為0,因為以後就不考慮這個點了.運算子優先順序要弄清楚!

#include #include 

#include

#include

using

namespace

std;

const

int mod = 1000000007

;int n,m,k,f[40][40][1

<< 9][10

],maxn;

intmain()

}if (((k & (1

<< k)) == 0) &&f[i][j][k][k])

}printf(

"%d\n

",f[n + 1][m][0][0

]); //最後答案都會匯集到一點上

return0;

}

BZOJ3195 Jxoi2012 奇怪的道路

time limit 10 sec memory limit 128 mb 小宇從歷史書上了解到乙個古老的文明。這個文明在各個方面高度發達,交通方面也不例外。考古學家已經知道,這個文明在全盛時期有n座城市,編號為1.n。m條道路連線在這些城市之間,每條道路將兩個城市連線起來,使得兩地的居民可以方便地...

bzoj3195 Jxoi2012 奇怪的道路

題目鏈結 一張 n 個點 m 條邊的無向圖,每個點度數為偶數,乙個點只能向標號與它的差不超過 k 的點連邊,問構圖方案。三維狀態搞了半天的我眼淚掉下來t t f i j s l 表示,前 i 個點,已經連了 m 條邊,第 i k 個點到第 i 個點的狀態為 s 當前討論 i 與 i k l 的連邊情...

bzoj 3195 奇怪的道路 狀壓dp

看範圍,狀壓沒毛病 但是如果隨便連的話給開1 16,乘上n,m就爆了 所以規定轉移時只向回連邊 於是想狀態陣列 f i j 表示到i這裡i前k位的狀態為j 表示奇偶 發現有條數限制,但是n,m,2 k都比較小,加一維,f i j k 表示前i位,用j條路,i前的k位狀態為j 轉移的話,因為1 u v...