題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2045

這是一道比較考驗算法的題目,他的主要目的是考驗選手的遞推能力。
我一開始的思路是用遞推去進行運算,一直用第一塊涂3種顏色,第二塊能涂2種,以此類推直到最后一塊也為2種(先把第一個符合相鄰的顏色不同全部列舉),再用這個數(shù)減去“在滿足第一個條件的但并不滿足第二個條件的數(shù)量”,就能得到正確的數(shù),但后來我發(fā)現(xiàn)這樣進行在后面要考慮的情況太復(fù)雜,可以去推一推。
? ? 然后我便考慮用遞歸,下面是我的遞歸想法

但是卻被提示時間超時,因此,我改變了想法,用遞歸得出的數(shù)據(jù),使用了遞推

但是,還是被系統(tǒng)說明超時,我覺得應(yīng)該是算法中的數(shù)據(jù)比較大,運算比較麻煩,為此,我簡化了我的算法

這個算法是通過上面的數(shù)據(jù)進行計算;可以說上面的兩種遞推都是由第一種遞歸的數(shù)據(jù)得到的;但是如果我能像師兄一樣看出這個遞推方式,就不用再去寫麻煩的遞歸。
當(dāng)然,這道題還有一個問題,沒錯,那就是int的溢出,所以需要使用float或者double,又或者可以用師兄的long long方式,但一定要保證數(shù)據(jù)不要溢出,不然的到的數(shù)據(jù)是錯誤的。