對於許多遞推題目,由於資料範圍太大直接迴圈寫會爆掉,這時首先想到的就是矩陣優化,把遞推式轉換成01矩陣通過快速冪優化。
比如最簡單的斐波納挈,如果n非常大,迴圈遞推肯定是不合適的,那麼可以考慮下面的公式 (f[n],f[n-1])=(f[n-1],f[n-2])*a; 這裡的a是乙個01矩陣,此時的a= 2*2的矩陣, 可想而知 f[3] = a的n-2次冪*(f[2],f[1]); 形如斐波納挈的遞推公式轉換矩陣都很簡單, 順便附上poj3070的 斐波納挈轉矩陣快速冪的**
#include#include#include
#define mod 10000
using
namespace
std;
struct
macpri,unit;
mac power(mac x,mac y)}}
return
temp;
}void eachother(int
n) pri =power(pri,pri);
n >>= 1
; }
printf(
"%d\n
",unit.frob[0][1
]);}
intmain()
if(n==1||n==2
)
eachother(n);
}return0;
}
拯救LongMM (遞推公式求解)
拯救l o n g m m l a n p a s c c p p 題目描述 longdd 將軍為了平息延續數年戰亂,決定釋放戰俘營中所有的俘虜。然而,longdd 將軍不打算釋放敵軍的統帥longmm 因為這個傢伙異常聰明,是個難纏的 對手。所以longdd 將軍決定把longmm 用鍊子固定到牆...
遞推公式的優化 矩陣乘方
想必大家對魔鬼序列 斐波那契數列都不陌生吧 f n 2 f n 1 f n 用程式設計實現的時候,有四種常見的方法 當然乙個比乙個更為優化 1.天真演算法,求哪個就迴圈去求哪個唄,這樣f 0 f 1 前面的這些會重複好多遍計算,當然慢了。2.由底至上的方法,用陣列儲存起來,按照順序乙個個往上計算,這...
華為機試 放蘋果(遞推公式求解)
題目描述 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1 是同一種分法。輸入每個用例包含二個整數m和n。0 m 10,1 n 10。樣例輸入 7 3樣例輸出 public static int count int m,int n ...