hdu 汉诺塔

汉诺塔思路传送门:http://www.tuicool.com/articles/7FnMVf

下面是我的AC代码和一些特别的注意事项,比如我推导过程中犯得错误和写代码过程中犯的错误。

hd 1207 汉诺塔Ⅱ

注意中间变量由于pow()的 存在会比longlong还要大 更别说int了 所以要 unsigned long long 去存

#include <iostream>
#include <cmath>
using namespace std;
typedef unsigned long long ll;
const ll inf=9999999999999;

ll dp[66];
int main()
{
    dp[1]=1;

    for(int x=2;x<=64;x++)
    {
        ll min=inf;
        for(int i=1;i<x;i++)
        {
            ll t=2*dp[i]+pow(2,x-i)-1;
            if(min>t)
            {
                min=t;
            }
        }
        dp[x]=min;
    }

    int n;
    while(cin>>n)
    {
       cout<<dp[n]<<endl;
    }
    return 0;
}

hd 2064 汉诺塔Ⅲ

关键点!!! 不要用pow,会WA的,因为

pow内只能用 float double ,强制转化后会失精度  

还有就是注意数据范围

#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
//typedef unsigned long long ll;
//const ll inf=9999999999999;
ll dp[36];
int main()
{
    dp[1]=2;
    for(int i=2;i<36;i++)
    {
        dp[i]=3*dp[i-1]+2;
    }
    int n;
    while(cin>>n)
    {
       cout<<dp[n]<<endl;
    }
    return 0;
}
时间: 2024-08-07 00:18:03

hdu 汉诺塔的相关文章

水题 第四站 HDU 汉诺塔VII

先来回忆一下汉诺塔 A,B,C,三个塔将A塔上的n块砖转移到C塔,首先将(n-1)块砖转移到B塔,将第n块砖转移到C塔,再将B塔上的(n-1)块砖转移到C塔,所以 函数为借助B塔,将A塔的砖转移到C塔, 首先是借助C塔,将A塔的砖转移到B塔, 然后是借助A塔,将B塔的砖转移到C塔. 附上网上的代码,有助于理解,出处 http://blog.csdn.net/kkkkkxiaofei/article/details/8333644/ 1 #include <iostream> 2 #includ

hdu 1207 汉诺塔II (DP+递推)

汉诺塔II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4529    Accepted Submission(s): 2231 Problem Description 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往

HDU 1997 汉诺塔VII

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1997 Problem Description n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列.由于发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱子从下往上的大小仍保持如下关系 : n=m+p+qa1>a2>...>amb1>b2>...>bpc1>c2>...>cqai是A柱上的盘的盘号系

HDU 2064 汉诺塔III (递推)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2064 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面. 现在我们改变游戏的玩法,不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到下盘的上面. Daisy已经做过原来的汉诺塔问题

HDU 1996 汉诺塔VI

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1996 n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列.由于 发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱 子从下往上的大小仍保持如下关系 : n=m+p+q a1>a2>...>am b1>b2>...>bp c1>c2>...>cq 计算所有会产生的系列总数. Input包含多组数据,

汉诺塔III HDU - 2064

汉诺塔III HDU - 2064 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面.  现在我们改变游戏的玩法,不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到下盘的上面.  Daisy已经做过原来的汉诺塔问题和汉诺塔II,但碰到这个问题时,她想了很久都不能解决,现在请你帮

HDU 2064 汉诺塔III(递归)

题目链接 Problem Description 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面.现在我们改变游戏的玩法,不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到下盘的上面.Daisy已经做过原来的汉诺塔问题和汉诺塔II,但碰到这个问题时,她想了很久都不能解决,现在

hdu 2064 汉诺塔III

汉诺塔III Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11335    Accepted Submission(s): 5121 Problem Description 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右

Hdu 1207 汉诺塔II

汉诺塔II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8433    Accepted Submission(s): 4162 Problem Description 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往