道路千萬條,安全第一條!hf校區到yb校區有很多種走法,我們可以把走法看成n個節點的有向圖,假設hf代表0號節點,yb代表n-1號節點,gm想從0號節點出發,到n-1號節點,但必須恰好在t時刻到達!你能告訴gm一共有多少種走法嗎?注意:gm不能在某個節點逗留,且通過某有向邊時嚴格為給定時間(邊權)。
輸入
滿足 2 <= n <= 10 ; 1 <= t <= 1000000000。
輸出
包含乙個整數,可能的路徑數,這個數可能很大,只需輸出這個數除以2009的餘數。
樣例輸入
2 211
00樣例輸出
1首先想乙個簡單的情況,如果只是有0,1所組成的矩陣我們該如何求呢
例如這裡有乙個性質,也就是這乙個矩陣的t次冪所在的s[i][j]正是從i到j的時間為t的路徑數。
震驚吧,我也很震驚...
仔細想一想其實也確實是這樣。
我們先看2次方
(1,1)就是意義為1到1中途經過1的情況,就相當於走了2(時間)。而(1,2)則是1到2中途經過2的情況,這樣推下去確實也沒有問題,因為(i,j)為1則就說明了i,j有路。
其實我們回到矩陣乘法的基本定義
其實也就這麼做出來。
但這道題又不是由0,1構成,我們就需要拆點。
例如我們就拆成了
我們就是將每乙個點拆成它的最大邊權個(這樣才能構造出全部為1,0)
拆點過程呢...看**吧,我覺得自己想一下還是可以理解的。(模板**好)
#include#include#include#include#include#include#includeusing namespace std;
struct matrix
matrix operator * (const matrix &x)const
}a,b;
int n,t;
long long maxn;
int xb(int x,int y)
matrix qkpow(matrix x,int y)
return ans;
}int main()
for (int i = 1;i <= n;i ++)
}b.n = b.m = maxn * n;
b = qkpow(b,t);
printf("%lld\n",b.c[1][(n - 1) * maxn + 1]);
}
廣搜**
深搜**
(搜尋真好用)
Oracle千萬條記錄的測試
客戶 訂單 訂單項 插入資料的儲存過程如下 create or replace procedure createusers is v sequ user number 19 v sequ order number 19 begin for v count in 1.1000000 loop inse...
千萬條記錄分頁查詢優化
分頁查詢是最常用的場景之一,但通常也是最容易出問題的地方。比如對於下面簡單的語句,一般 dba 想到的辦法是在 type,name,create time 欄位上加組合索引。這樣條件排序都能有效的利用到索引,效能迅速提公升。select from tstb logwhere type sqlstat...
介貸網 貸款道路千萬條,正規謹慎第一條!
近年來,網貸 二字出現在人們生活中,逐漸影響著大多數年輕人的生活,成為大家喜聞樂見的一種消費方式。據網貸天眼的資料顯示 排名前十的網貸平台有陸金服人人貸 宜人貸 玖程式設計客棧富普惠 微貸網 拍拍貸 麻袋財富 小贏網金 桔子理財 51 人品。雖然網貸天眼做出了排名,但是也無法斷定網貸平台是否正規可靠...