矩陣快速冪一般是為了求解遞推問題關於矩陣快速冪,可以參見這裡and這裡eg:菲波那切數列
【題目描述】
小澳者表也,數學者景也,表動則景隨矣。
小澳不喜歡數學,可數學卻待小澳如初戀,小澳睡覺的時候也不放過。
小澳的夢境中出現了乙個平面直角座標系,自原點,向四方無限延伸。
小澳在座標系的 原點,他可以 向上、向左或者向右走。他可以走 n 步, 但不能經過相同的點。
小澳想知道他有多少種走法。
【輸入格式】輸入檔名為 coordinate.in。
輸入檔案僅第一行乙個正整數 n,表示小澳可以走的步數。
【輸出格式】輸出檔名為 coordinate.out。
輸出檔案共一行,輸出乙個正整數,表示答案(對 10^9+7 取模)。
【輸入輸出樣例 1 】in:
2
out:
7
【輸入輸出樣例 1 說明】從(0,0)出發走 2 步,共 7 種走法:
(0,0)->(0,1)->(0,2)
(0,0)->(0,1)->(1,1)
(0,0)->(0,1)->(-1,1)
(0,0)->(1,0)->(2,0)
(0,0)->(1,0)->(1,1)
(0,0)->(-1,0)->(-2,0)
(0,0)->(-1,0)->(-1,1)
【輸入輸出樣例 2 】in:
3
out:
17
【資料規模與約定 】測試點編號 n
1~2 n<=10
3~4 n<=100
5~6 n<=1000
7~8 n<=10^6
9~10 n<=10^9
solution:
做這題的時候先寫了乙個走迷宮的暴力dfs,找到遞推公式
//dfs暴力
#include
#define ll long long
#define mod 100000
using
namespace
std;
int n,cnt;
intmap[2002][2009];
int u[3]=,v[3]=;
bool inmap(int a,int b)
void dfs(int x,int y,int t)
for(i=0;i<3;i++)
}}int main()
十以內可以解決了(20分)
然後將1~10內的解輸出來找到遞推關係
矩陣快速冪之所以要用,是因為它確實求遞推式的時候很快
一般遞推://slow
#include
#define ll long long
#define mod 1000000007
using
namespace
std;
int n;
void solve()
if(n==2)
ll f1=3,f2=7,f3;
int i;
for(i=3;i<=n;i++)
printf("%i64d",f3%mod);
}int main()
矩陣快速冪://fast
#include
#define ll long long
#define mod 1000000007
int n;
struct m;
m s;
m work(m x,m y)
ans.map[i][j]%=mod;}}
return ans;
}void solve()
tmp=work(tmp,tmp);
n>>=1;
}printf("%d",s.map[2][1]%mod);
}int main()
if(n==2)
s.map[1][1]=3;s.map[2][1]=7;
solve();
return
0;}
矩陣快速冪 小講
呃.一直在玩,感覺暑假快廢過去了。一篇很好的文章 這是乙個應用吧,原題中有提示要用矩陣快速冪的,這裡有點坑 算是mark 一下 include include includeusing namespace std struct matrix ans,base matrix mul matrix a,...
小愛密碼(矩陣快速冪)
序號 137難度 困難時間限制 1000ms記憶體限制 80m 描述 小愛同學有乙個智慧型密碼鎖。鎖上有九位數字,小愛同學每次會給a,b,c,d,mod,n六個正整數。題目是這樣的 f 1 a,f 2 bf 1 a,f 2 b f n f n 1 cdot f n 2 cdot c d n gt 2...
矩陣的快速冪
問題 求m m矩陣的等比前n項和,即a a2 a3 a n struct node x,y 分析 矩陣乘法中關於等比矩陣的求法 a e 0 e e為單位矩陣。由等比矩陣的性質 n a e a n 1 a 1 a 2 a n 1 0 e 0 e 所以我們在求此類問題時 1.矩陣a擴大4倍 a e 0 ...