codevs1145

news/2024/7/7 21:29:03

题目描述                     Description                   

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

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

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

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

 

输入描述                 Input Description              

为一个正整数n,表示在A柱上放有2n个圆盘。

                输出描述                 Output Description              

仅一行,包含一个正整数, 为完成上述任务所需的最少移动次数An

                样例输入                 Sample Input              

2

样例输出                 Sample Output              

6

数据范围及提示                 Data Size & Hint              

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

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

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>

using namespace std;

int n;
int an[100000],l;
int bn[100000];
int cn[100000];

void add()
{
    memset(bn,0,sizeof(bn));
    int i,j;
    for(i = 0;i<=l;i++)
    {
        bn[i+1] = (an[i]+an[i]+bn[i])/10;
        an[i] = (an[i]+an[i]+bn[i])%10;
    }
    if(an[l] != 0) l++;
}
void add2()
{
    memset(bn,0,sizeof(bn));
    memset(cn,0,sizeof(cn));
    bn[0] = 1;
    int i,j;
    for(i = 0;i<=l;i++)
    {
        cn[i+1] = (an[i]+bn[i]+cn[i])/10;
        an[i] = (an[i]+bn[i]+cn[i])%10;
    }
    if(an[l]) l++;
}

int main()
{
    int i,j,k;
    int n;
    memset(an,0,sizeof(an));
    an[0] = 1,l = 1;
    cin>>n;
    for(i = 2;i<=n;i++)
    {
        add();
        add2();
    }
    add();
    for(i = l-1;i>=0;i--)
        printf("%d",an[i]);
    cout<<endl;
    return 0;
}

 

转载于:https://www.cnblogs.com/wos1239/p/4367104.html


http://www.niftyadmin.cn/n/917654.html

相关文章

Java format date to String or String to date

参考类: java.text 类 DateFormat java.lang.Objectjava.text.Formatjava.text.DateFormat所有已实现的接口: Serializable, Cloneable 直接已知子类: SimpleDateFormat 构造方法摘要protected DateFormat() 创建一个新的 DateFormat。

TRUNCATE TABLE (Transact-SQL)

删除表中的所有行&#xff0c;而不记录单个行删除操作。 TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似&#xff1b;但是&#xff0c;TRUNCATE TABLE 速度更快&#xff0c;使用的系统资源和事务日志资源更少。 与 DELETE 语句相比&#xff0c;TRUNCATE TABLE 具有以下优…

Java Calendar getInstance

public static void main(String[] args) throws ParseException

JavaScript的检测属性、属性特性、枚举属性

JavaScript的检测属性、属性特性、枚举属性 /* 检测属性 检测属性可以通过三种方式 1.通过in运算符 2.通过hasOwnPerperty() 如果给定的属性是继承属性将返回false 3.通过propertyIsEnumerable()&#xff1a;只有检测到的自有属性且这个属性的可枚举性为true时它才返回true,某…

Java Clone

Clone is for object copy , and not reference the same object. include deep copy and simple copy, lets take a look: 演示程序(demo show downlaod from ): public

端口状态

TCP协议规定需要三次握手才能成功连接、四次握手才能成功断开连接&#xff0c;在cmd命令行中输入netstat -an即可查看网络端口状态; 1.Listening: 处于监听状态; 2.Established: 建立连接表示正在通信; 3.Close_wait: 对方主动关闭连接或者网络异常导致连接中断&#xff0c;这时…

今天见到了袁鸣和当当网的俞渝

其中俞渝还提到了一个技术层次的问题&#xff1a; 比如在当当搜索 照相机 和 相机 得到的结果是不同的&#xff0c;解释是分词的问题。 其实&#xff0c;不应该仅仅是切词的问题&#xff0c;而涉及到更多&#xff0c;比如语义分析(近义&#xff0c;同义)、行为分析、关联性分…

孙鑫MFC学习笔记12:文件读写

1.指向常量的指针 2.指针常量 3.C语言对文件操作是在缓冲区&#xff0c;在缓冲区满或文件关闭时写入文件 读取相同 4.fflush刷新缓冲区&#xff0c;使缓冲区数据写入文件 5.fseek改变文件指针偏移量 6.stell获取文件指针当前位置 7.rewind重新放置文件指针到开始处 8.写入换行会…