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 #include4codeusing
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 }
奇怪的道路 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座城市,編號為...