首页 > 代码库 > HDU 1996 汉诺塔VI
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
计算所有会产生的系列总数.
发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱
子从下往上的大小仍保持如下关系 :
n=m+p+q
a1>a2>...>am
b1>b2>...>bp
c1>c2>...>cq
计算所有会产生的系列总数.
Input包含多组数据,首先输入T,表示有T组数据.每个数据一行,是盘子的数
目N<30.Output对于每组数据,输出移动过程中所有会产生的系列总数。Sample Input
313 29
Sample Output
32768630377364883
题解:每个盘子都有三种选择,所以是3的n方
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <cmath> 9 #include <ctime>10 #include <map>11 #include <set>12 #include <queue>13 using namespace std;14 #define lowbit(x) (x&(-x))15 #define max(x,y) (x>y?x:y)16 #define min(x,y) (x<y?x:y)17 #define MAX 10000000000000000018 #define MOD 100000000719 #define pi acos(-1.0)20 #define ei exp(1)21 #define PI 3.14159265358979323846222 #define INF 0x3f3f3f3f3f23 #define mem(a) (memset(a,0,sizeof(a)))24 typedef long long ll;25 ll gcd(ll a,ll b){26 return b?gcd(b,a%b):a;27 }28 bool cmp(int x,int y)29 {30 return x>y;31 }32 const int N=10005;33 const int mod=1e9+7;34 int main()35 {36 int t;37 cin>>t;38 while(t--){39 int n;40 ll m;41 cin>>n;42 m=pow(3,n);43 cout<<m<<endl;44 }45 return 0;46 }
HDU 1996 汉诺塔VI
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。