日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ1958-Strange Towers of Hanoi【递推】

發布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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【递推】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。