我解決編碼問題,並發現了下面的關係找到的可能安排的數量:遞歸關係的一般公式?
one[1] = two[1] = three[1] = 1
one[i] = two[i-1] + three[i-1]
two[i] = one[i-1] + three[i-1]
three[i] = one[i-1] + two[i-1] + three[i-1]
我能有輕鬆使用for循環找到直到n
,但是n
的值是10^9
的順序,並且我將無法從1
迭代到如此龐大的數字。
對於n
的每個值,我需要在O(1)
時間輸出值(one[n] + two[n] + three[n]) % 10^9+7
。
一些結果:
- 對於n = 1,結果= 3
- 對於n = 2,結果= 7
- 對於n = 3,結果= 17
- 對於n = 4 ,結果= 41
我花了幾個小時在上面找不到n
的通用公式。有人可以幫我嗎。
編輯:
n = 1, result(1) = 3
n = 2, result(2) = 7
n = 3, result(3) = result(2)*2 + result(1) = 17
n = 4, result(4) = result(3)*2 + result(2) = 41
所以,result(n) = result(n-1)*2 + result(n-2)
或 T(n) = 2T(n-1) + T(n-2)
你試過紙,鉛筆和一些代數嗎? – FDavidov
是的..嘗試鉛筆紙找出一個模式。找不到它。儘管代數不太好 –
嗯,我可以告訴你,乍一看,這看起來不難看出。不幸的是,我沒有時間參與其中。再試一次,這一次更難。 – FDavidov