POJ1958-Strange Towers of Hanoi【递推】
生活随笔
收集整理的這篇文章主要介紹了
POJ1958-Strange Towers of Hanoi【递推】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目鏈接:http://poj.org/problem?id=1958
大意
有4根柱子的漢諾塔,有n個盤,求移動次數
解題思路
首先我們定義只有三根柱子時有n個盤的話移動次數是dndn,然后dn=dn?1?2+1dn=dn?1?2+1
定義有四根柱子時有n個盤移動次數為fnfn
之后我們看四根柱子
我們可以將這個塔任意分割成兩部分,上面有k個,一個有n個
之后我們開始移動上面的
次數fkfk
然后我們移動下面的到第4個柱子
這時無論如何也不可以到達第3根柱子于是我們可以看作只有3個盤,于是次數dn?kdn?k
最后我們在將小盤移過去
這時消耗fkfk
于是總代價為fk?2+dn?kfk?2+dn?k
之后我們枚舉kk<script type="math/tex" id="MathJax-Element-686">k</script>取最優的答案就好了。
代碼
#include<cstdio> #include<algorithm> using namespace std; int n=12,d[13],f[13]; int main() {for (int i=1;i<=n;i++) d[i]=d[i-1]*2+1;//初始化f[1]=1;printf("1\n");for (int i=2;i<=n;i++){f[i]=2147483647;for (int j=1;j<i;j++)f[i]=min(f[i],f[j]*2+d[i-j]);//遞推求最優解printf("%d\n",f[i]);//輸出} }總結
以上是生活随笔為你收集整理的POJ1958-Strange Towers of Hanoi【递推】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P2280-激光炸弹【二维前缀和】
- 下一篇: vijos1197-费解的开关【递推,枚