題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2045
這是一道比較考驗(yàn)算法的題目计技,他的主要目的是考驗(yàn)選手的遞推能力硅蹦。
我一開始的思路是用遞推去進(jìn)行運(yùn)算,一直用第一塊涂3種顏色裤翩,第二塊能涂2種芥炭,以此類推直到最后一塊也為2種(先把第一個(gè)符合相鄰的顏色不同全部列舉),再用這個(gè)數(shù)減去“在滿足第一個(gè)條件的但并不滿足第二個(gè)條件的數(shù)量”羽峰,就能得到正確的數(shù)趟咆,但后來我發(fā)現(xiàn)這樣進(jìn)行在后面要考慮的情況太復(fù)雜,可以去推一推梅屉。
? ? 然后我便考慮用遞歸值纱,下面是我的遞歸想法
但是卻被提示時(shí)間超時(shí),因此坯汤,我改變了想法虐唠,用遞歸得出的數(shù)據(jù),使用了遞推
但是惰聂,還是被系統(tǒng)說明超時(shí)疆偿,我覺得應(yīng)該是算法中的數(shù)據(jù)比較大,運(yùn)算比較麻煩搓幌,為此杆故,我簡化了我的算法
這個(gè)算法是通過上面的數(shù)據(jù)進(jìn)行計(jì)算;可以說上面的兩種遞推都是由第一種遞歸的數(shù)據(jù)得到的溉愁;但是如果我能像師兄一樣看出這個(gè)遞推方式处铛,就不用再去寫麻煩的遞歸。
當(dāng)然拐揭,這道題還有一個(gè)問題撤蟆,沒錯(cuò),那就是int的溢出堂污,所以需要使用float或者double家肯,又或者可以用師兄的long long方式,但一定要保證數(shù)據(jù)不要溢出敷鸦,不然的到的數(shù)據(jù)是錯(cuò)誤的息楔。