NEUQ 1419: Hanoi双塔问题

来源:互联网 发布:java防止脚本注入 编辑:程序博客网 时间:2024/06/15 05:26

1419: Hanoi双塔问题

时间限制: 1 Sec  内存限制: 128 MB

题目描述

给定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的递推关系式。



来源

NOIP2007


分析:我忽然发现汉罗塔的移动步骤次数满足公式2^n-1,而汉罗双塔满足2^(n+1)-2,所以这题需要用到大数。


CODE:(开始没看到数据范围,写了个DFS)

#include <iostream>using namespace std;int ans;void DFS(int n){    if(n==1){        ans++;        return ;    }    DFS(n-1);    ans++;    DFS(n-1);    return ;}int main(){    int n;    while(cin>>n){        ans=0;        DFS(n+1);        cout<<ans-1<<endl;    }    return 0;}

CODE:

import java.util.*;import java.math.*;import java.io.*;public class Main{public static void main(String[] args) {Scanner cin=new Scanner(System.in);int n=cin.nextInt();BigInteger m=BigInteger.valueOf(2);BigInteger ans=m.pow(n+1);ans=ans.subtract(m);System.out.println(ans);}}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 外地户口转到北京档案怎么办 隧道防水板过紧怎么办 到国企没报到证怎么办 车子锁了油箱盖能开怎么办 单位不接受档案和户口怎么办 完税凭证弄丢了怎么办 育种玉米公本早了怎么办 网银转账打错了怎么办 转账名字打错了怎么办 普通转账名字打错了怎么办 银行账号转错了怎么办 打款信息错了怎么办 报到证过期了档案怎么办 日本suica卡丢了怎么办 日本地铁卡丢了怎么办 极光卡五星老输怎么办 皮秒留下的色沉怎么办 鼻综合鼻内增生怎么办 做完鼻综合脸肿怎么办 上海车子卖了etc怎么办 车卖了etc设备怎么办 车卖了etc没摘怎么办 交通信息卡丢了怎么办 多囊卵巢无排卵怎么办 卵巢腹镜手术后一直出汗怎么办 双侧卵巢多囊怎么办 备孕子宫内膜厚怎么办 有成熟卵泡不破怎么办 卵泡不排萎缩了怎么办 卵泡8mm一直不长怎么办 卵泡已经长到28x19mm怎么办 多囊卵巢卵泡长不大怎么办 优势卵泡19不排怎么办 多囊卵泡不排卵怎么办 卵泡两天长2mm怎么办 子宫小43*38*26怎么办 优势卵泡打破卵针后并不破怎么办 ktv禁止自带酒水怎么办 记名西瓜卡丢了怎么办 日本电车卡丢了怎么办 网贷暂时没钱还怎么办