题目描述                     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[],l;
int bn[];
int cn[]; void add()
{
memset(bn,,sizeof(bn));
int i,j;
for(i = ;i<=l;i++)
{
bn[i+] = (an[i]+an[i]+bn[i])/;
an[i] = (an[i]+an[i]+bn[i])%;
}
if(an[l] != ) l++;
}
void add2()
{
memset(bn,,sizeof(bn));
memset(cn,,sizeof(cn));
bn[] = ;
int i,j;
for(i = ;i<=l;i++)
{
cn[i+] = (an[i]+bn[i]+cn[i])/;
an[i] = (an[i]+bn[i]+cn[i])%;
}
if(an[l]) l++;
} int main()
{
int i,j,k;
int n;
memset(an,,sizeof(an));
an[] = ,l = ;
cin>>n;
for(i = ;i<=n;i++)
{
add();
add2();
}
add();
for(i = l-;i>=;i--)
printf("%d",an[i]);
cout<<endl;
return ;
}

codevs1145的更多相关文章

随机推荐

  1. zookeeper 丢失事件/miss event

    今天在统计页面上发现有个节点丢失了,经过仔细分析后,发现同一个节点上的二个应用(同时监控zk)其中一个丢失了一个event,检查zk cluster没有发现异常... 通过网络搜寻,出现miss ev ...

  2. Serializable在C#中的作用——.net中的对象序列化

    序列化是指将对象实例的状态存储到存储媒体的过程,在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流,在随后对对象进行反序列化时,将创建出与 ...

  3. android——ObjectAnimator动画(一)

    直接贴上集中用法 package com.example.test; import com.example.test.views.CircleView; import android.animatio ...

  4. JQ 模仿注册时等待的时间

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. C# Winform对文件夹的权限判断及处理

    WindowsIdentity类可以获取当前执行者的身份信息 /// <summary> /// 递归搜索文件方法 /// </summary> /// <param n ...

  6. java之集合类框架的简要知识点:泛型的类型擦除

    这里想说一下在集合框架前需要理解的小知识点,也是个人的肤浅理解,不知道理解的正不正确,请大家多多指教.这里必须谈一下java的泛型,因为它们联系紧密,我们先看一下这几行代码: Class c1 = n ...

  7. python基础之 optparse.OptionParser

    optparse是专门用来在命令行添加选项的一个模块. 首先来看一段示例代码 from optparse import OptionParser MSG_USAGE = "myprog[ - ...

  8. HDU 5806 - NanoApe Loves Sequence Ⅱ (BestCoder Round #86)

    若 [i, j] 满足, 则 [i, j+1], [i, j+2]...[i,n]均满足 故设当前区间里个数为size, 对于每个 i ,找到刚满足 size == k 的 [i, j], ans + ...

  9. mysql单表大小的限制

    mysql单表大小的限制一.MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定(限制扩大到64pb),而是由所在主机的OS上面的文件系统来决定了.在mysql5. ...

  10. 再谈Android应用瘦身

    Android应用apk安装包的大小,虽然对于现在WiFi普及情况而言消耗流量已经微乎其微,但是,对于一款好的应用,对于一款负责任的应用,当然是越小越好了. 引言: .应用越小,下载越快,也就意味着新 ...