題意:
給你乙個(n+1)*(m+1)的矩陣mat,然後給你mat[0][1] = 233 ,mat[0][2] = 2333,mat[0][3] = 23333...,然後輸入mat[1][0] ,mat[2][0] ,mat[3][0]....然後給了矩陣中的其他數值是mat[i][j] = mat[i-1][j] + mat[i][j-1],最後讓你輸出mat[n][m]。
思路:其中n <= 10 m <= 10^9 ,直接暴力果斷超時,這個題目我們要仔細觀察,n <= 10這個很重要,太大的話就不好弄了。這個題目我們可以用矩陣快速冪去做,構造乙個n+2的矩陣
:a[1] a[2] a[n] 233 3 1 1 1 0 0 a[1] a[2] a[n] 2333 3
* 0 1 1 0 0 =
0 0 1 0 0
1 1 1 10 0
0 0 0 1 1
提示下,矩陣這麼建的原因是比如當前的a[3] = 上一步的 a[1] + a[2] + a[3] + 233..ok
#include#include#define mod 10000007typedef struct
a;a mat_mat(a a,a b,
intn)
a quick_mat(a a,
intb,
intn)
returnc;
}int
main
()gz.mat[n+1][n+1] =10;gz.mat[n+2][n+1] =gz.mat[n+2][n+2] =1;a now=quick_mat(gz,m,n+2);
__int64ans=0;
for(i=1;i<=n;i++)ans= (ans+num[i] *now.mat[i][n]) %mod;ans= (ans+233*now.mat[n+1][n] +3*now.mat[n+2][n]) %mod;printf("%i64d\n",ans);
}return0;
}
POJ 3233,HDU 5015 矩陣快速冪
poj 3233 利用矩陣快速冪推出轉移矩陣。注意什麼時候取模,同時用printf一定要注意格式的問題,與型別要匹配。這次的轉移矩陣是由一些子矩陣構成,不再是一些普通的常數了。left e e o a end right times left s a k end right left s k a e...
矩陣基礎1004 HDU 5015
題意 矩陣的第一行是 23 233 2333 23333 給出n m矩陣的第一列,其他都滿足f i,j f i 1,j f i,j 1 求f n,m 思路 我們對於每行進行推導,發現一些規律 f 0 f 0 10 3 f 1 f 1 f 0 10 3 f 2 f 2 f 1 f 0 10 3 這樣,...
hdu 4965 矩陣快速冪
給定兩個矩陣a,b,分別為n k和k n 求出矩陣c a b,矩陣m c n n 將矩陣m中的所有元素取模6,得到新矩陣m 並計算矩陣m 中所有元素的和 注意到ba 得到 6 6,而ab 得到1000 1000 轉化乘法算式為 m abababab.a ba n n 1 b 直接用矩陣快速冪即可 i...