Jxoi2012 奇怪的道路

2022-05-20 22:41:14 字數 1725 閱讀 7731

description

小宇從歷史書上了解到乙個古老的文明。這個文明在各個方面高度發達,交通方面也不例

外。考古學家已經知道,這個文明在全盛時期有n 座城市,編號為1..n。m 條道路連線在

這些城市之間,每條道路將兩個城市連線起來,使得兩地的居民可以方便地來往。一對城

市之間可能存在多條道路。

據史料記載,這個文明的交通網路滿足兩個奇怪的特徵。首先,這個文明崇拜數字k,所

以對於任何一條道路,設它連線的兩個城市分別為u 和v,則必定滿足1 <=|u - v| <= k。此

外,任何乙個城市都與恰好偶數條道路相連(0 也被認為是偶數)。不過,由於時間過於

久遠,具體的交通網路我們已經無法得知了。小宇很好奇這n 個城市之間究竟有多少種可

能的連線方法,於是她向你求助。

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

input

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

output

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

sample input

【輸入樣例1】

3 4 1

【輸入樣例2】

4 3 3

sample output

【輸出樣例1】

3【輸出樣例2】

4資料規模

hint

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

題目說明

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

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

solution:

由於k最大只有8,所以可以用狀壓  (最可怕的是,我考試時想到狀壓,看到n,m的範圍,竟然放棄了正解.............)

設f[i][j][k]為  當前到了第i位  當前用了j條路  k記錄從 i-k 到 i 的狀態

首先從前 i-1 轉移到 i ,意義:當前第i個點不連邊

然後從 i 轉移到 i ,意義:當前第i個點列舉與前面點相連

ans=f[n][m][0]

1 #include2 #include3 #include4

using

namespace

std;

5const

int mod=1000000007;6

const

int n=(1

<<9)+10;7

int minn(int a,int b)

8int maxn(int a,int b)910

intn,m,kk,hh;

11int

maxp;

12int f[31][31

][n];

1314

void

out11()

1523

24int

main()

39//

這個地方必須從i-1到i轉移

40//

如果在i從i-1推過來,會重複

41for(int v=kk;v>=1;--v)

4251}52

}5354//

out11();

5556 cout<0

];57

//while(1);

58return0;

59 }

code

奇怪的道路 JXOI2012

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

BZOJ3195 Jxoi2012 奇怪的道路

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

bzoj3195 Jxoi2012 奇怪的道路

time limit 10 sec memory limit 128 mb submit 544 solved 354 submit status discuss 小宇從歷史書上了解到乙個古老的文明。這個文明在各個方面高度發達,交通方面也不例外。考古學家已經知道,這個文明在全盛時期有n座城市,編號為...