TopCoder SRM 701 div1. 900 FibonacciStringSum - 矩陣乘法

  初賽大原題!(霧
  稍微推一推就可以得到要算的式子是
  

k(n+1kk)kb(nk)a

  可以用二項式定理展開,得到
  
i(ai)ni(1)aik(n+1kk)kb+ai

  前面的求和指標是O(a) 的,很小,所以現在想辦法算後面的東西。
  注意到算k 次方和的時候是可以矩乘的,這個玩意同理。
  設
Sd(n)=k(nkk)kd

  稍微把組合數拆一下然後變個型,嘗試搞個遞推式出來
  
Sd(n)=k0((n1kk)+(n1kk1))kd  =Sd(n1)+k+10(n2kk)(k+1)d  =Sd(n1)+k(n2kk)j(dj)kj  =Sd(n1)+j(dj)Sj(n2)

  於是Sd(n) 這玩意就可以愉快地矩乘了。
  設
F1×2(d+1)(n)=[S0(n),S1(n)...Sd(n),S0(n+1),S1(n+1)...Sd(n+1)]

  那麼F(n)F(n+1) 的轉移矩陣A 是很容易得到的。
  我們原本要算的東西現在變成了
i(ai)ni(1)aiSb+ai(n+1)

  注意到實際上一次矩乘就可以把Sb...Sb+a 給算出來,於是總複雜度爲O(a3logn)
  代碼太醜就不貼了。
發佈了135 篇原創文章 · 獲贊 6 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章