zoukankan      html  css  js  c++  java
  • Hanoi双塔问题(递推)

    Hanoi双塔问题

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 10  解决: 4
    [提交][状态][讨论版][命题人:外部导入]

    题目描述

    给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有空的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。现要将 这些国盘移到C柱上,在移动过程中可放在B柱上暂存。要求:

    (1)每次只能移动一个圆盘;

    (2) ABC三根细柱上的圆盘都要保持上小下大的顺序;

    任务:An2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An

    输入

    输入文件hanoi.in为一个正整数n,表示在A柱上放有2n个圆盘。

    输出

    输出文件hanoi.out仅一行,包含一个正整数,为完成上述任务所需的最少移动次数An

    样例输入

    1
    

    样例输出

    2
    

    提示


    对于50%的数据, 1<=n<=25


    对于100% 数据, 1<=n<=200


    设法建立AnAn-1的递推关系式。

    题解

    通过手推的方式可以发现转移方程f[i]=2*f[i-1]+2,由于n<=200,所以要用高精

    #include <iostream>    
    #include <cstdio>    
    using namespace std;    
    int n,c,a[22],i,j;    
    int main()    
    {    
        cin>>n;    
        a[1]=2;                
        for(i=2;i<=n;i++)        
        {    
            c=0;                     
            for(j=1;j<=20;j++)        
            {    
                a[j]=a[j]*2+c;        
                if(j==1)   
                   a[j]+=2;      
                c=a[j]/10000;         
                a[j]%=10000;          
            }    
        }    
        i=20;    
        while(i>1&&!a[i])   
              i--;     
        cout<<a[i];                   
        while(--i)    
              printf("%04d",a[i]);     
        cout<<endl;    
        return 0;    
    }    
  • 相关阅读:
    HEOI2018——welcome to NOI2018
    【HEOI 2018】Day2 T2 林克卡特树
    【康托展开】
    【省选模拟测试3】
    【BZOJ 2850】巧克力王国
    【BZOJ 3569】 DZY Loves Chinese II
    【BZOJ 4652】【NOI 2016】循环之美
    【BZOJ 3534】: [Sdoi2014]重建
    mysql 的研究
    mysql 的研究
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/8595158.html
Copyright © 2011-2022 走看看