poj1958 Strange Towers of Hanoi(递归)

来源:互联网 发布:北汽黄骅分公司 知乎 编辑:程序博客网 时间:2024/06/07 21:09

原题:http://poj.org/problem?id=1958

把汉诺塔问题拓展为4根,递归方法题目已经给出。天呐,我竟然理解错题意了,wa了好几次,要哭了。

#include<cstdio>const int M=0x7fffffff;int dp[13]={0};//记录移动n根从A->D的最小步骤 int three(int n){if(n==0){return 0;}else if(n==1){return 1;}else{int now=0;now=three(n-1);now++;now=now+three(n-1);return now; }}int four(int n){if(dp[n]!=0){return dp[n];}if(n==0){return 0;}if(n==1){return 1;}int min=M;for(int i=1;i<=n;i++){int ans=0;ans=four(n-i);ans=ans+three(i);ans=ans+four(n-i);if(min>ans){min=ans;}}return min;}int main(){for(int i=1;i<=12;i++){int min=M;for(int k=1;k<=i;k++){int now=four(i-k); //第一步要移动i-k到B now=now+three(k);  //把k移动到D now=now+four(i-k);//把B上的i-k 移动回D if(now<min){min=now;}}dp[i]=min;printf("%d\n",min);}return 0;} 


原创粉丝点击