hanoi双塔

2024-05-30 20:18
文章标签 双塔 hanoi

本文主要是介绍hanoi双塔,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem Description

给定a、b、c三根足够长的细柱,在a柱上放有2n(n<=200)个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的。尺寸相同的圆盘在一起。
现在将这些圆盘移动到c柱上,在移动过程中可放在b柱上暂存。要求:
(1) 每次只能移动一个圆盘;
(2) a、b、c三根细柱上的圆盘都要保持上小下大的顺序。
请问完成上述任务所需的最少移动次数。

Input

输入第一行为T,表示数据组数,对于每组数据就一个n,表示在a柱上放有2n个圆盘。

Output

对于每组输入,输出完成上述任务所需的最少移动次数。

Sample Input

2
1
2

Sample Output

2
6
/*
             解题报告:A柱上只有N个盘子,至少移动次数为POW(2,N)-1次,而有N个不同的尺寸的两个
                       相同尺寸的盘子至少移动的次数为POW(2,N+1)-2次;
*/
//标程:
#include<stdio.h>
#include<string.h>
int p[205][205],a[200],maxn;
void  f(int x)
{
	int i,j;
for(i=1;i<=x+1;i++)
	{
for(j=1;j<=200;j++)
			p[x][j]=p[x][j]*2;
		for(j=1;j<=200;j++)
		{
			if(p[x][j]>=10) 
			{
				p[x][j+1]+=p[x][j]/10;
				p[x][j]%=10;
				maxn=j+1;
			}
			if(p[x][j]) maxn=j;
		}
	}
}
int main()
{
	//freopen("a.txt","r",stdin);
int n,t,i,j;
	memset(p,0,sizeof(p));
	
for(i=1;i<=200;i++)
	{
		maxn=0;
		p[i][1]=1;
		memset(a,0,sizeof(a));
		f(i);
	    p[i][0]=maxn;
		p[i][1]-=2;
	}
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		for(i=p[n][0];i>0;i--)
			printf("%d",p[n][i]);
		printf("\n");
		return 0;
}

这篇关于hanoi双塔的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016813

相关文章

word2vec 两个模型,两个加速方法 负采样加速Skip-gram模型 层序Softmax加速CBOW模型 item2vec 双塔模型 (DSSM双塔模型)

推荐领域(DSSM双塔模型): https://www.cnblogs.com/wilson0068/p/12881258.html   word2vec  word2vec笔记和实现 理解 Word2Vec 之 Skip-Gram 模型 上面这两个链接能让你彻底明白word2vec,不要搞什么公式,看完也是不知所云,也没说到本质. 目前用的比较多的都是Skip-gram模型 Go

汉诺塔hanoi

递归汉诺塔 这个递归的例子已经见过好多次了,但是每次遇到的时候,或多或少都出过bug,现在来总结一下,以便后面会用到 #include <iostream>using namespace std;void hanoi(int n,char here, char temp, char there){if(n == 1){cout << 1 << "从"<<here<<"到"<<there <<

推荐系统学习笔记(五)-----双塔模型

目录 双塔模型 训练 pointwise训练 pairwise训练 listwise训练 双塔模型 矩阵补充模型只用到了用户id和物品id,其余属性没有用上  用户属性也可以这样处理 用户塔和物品塔各输出一个向量,两个向量的余弦相似度作为兴趣的预估值 训练 第一种:pointwise,独立看待每个正负样本,做二分类 第二种:pairwise,每次取一个正

Codeforces 392B Tower of Hanoi(递归+记忆化搜索)

题目链接:Codeforces 392B Tower of Hanoi 题目大意:给出一个3*3的矩阵,表示从i移动到j的代价,现在给出n,表示有n个碟子在1柱,需要移动到3柱,要求给出最小的花费。 解题思路:dp[l][r][n],表示的是从l移动n个碟子到r的最小花费,然后总共有两种移动方式: ans1 = solve(l, x, n-1) + solve(x, r, n-1

Codeforces Round #230 (Div. 2) C. Blocked Points D. Tower of Hanoi

C. Blocked Points 题意:A点和B点是4-connected,的条件是 the Euclidean distance between A and B is one unit and neither A nor B is blocked; or there is some integral point C, such that A is 4-connected with C,

poj1920 Towers of Hanoi

关于汉诺塔的递归,记住一个结论是,转移n个盘子至少需要2^n-1步 #include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<string>using namespace std;int two[100005],pos[100005];int m

【经典论文阅读10】MNS采样——召回双塔模型的最佳拍档

这篇发表于2020 WWW 上的会议论文,提出一种MNS方式的负样本采样方法。众所周知,MF方法难以解决冷启动问题,于是进化出双塔模型,但是以双塔模型为基础的召回模型的好坏十分依赖负样本的选取。为了解决Batch内负样本带来的选择性偏差问题,本文提出MNS方法融合了批采样和均匀采样。实验表明,配合这种负样本的采样的双塔模型的召回能力得到了明显提升。 1. 贡献 本文提出一种新颖的负

双塔模型模型结构、样本选择、训练方式、线上服务、模型更新

召回模型目的是快速选取用户可能感兴趣的物品,凡事用户可能感兴趣的都取回来 然后交给后续排序模型逐一甄别。 双塔模型结构 不止能使用id特征(能使用id之外的其他特征),用户侧能用画像等其他特征,包括离散特征和连续特征,物品侧除了id特征以外,还可以用更多其他特征,这是与矩阵补充、cf、swing等模型的区别。 双塔有一个用户塔都是用户特征,有一个物品塔,塔可以用DNN,DCN等结构,最后计算

双塔模型在召回和粗排的区别

答案参考:推荐系统中,双塔模型用于粗排和用于召回的区别有哪些? - 知乎 召回和粗排在不同阶段面临样本不一样,对双塔来说样本分布差异会使召回和粗排采取不一样的方式。召回打分空间是全部item空间,曝光只有很少一部分,同时双塔召回只是多路召回的一种,因此双塔会从几个方面优化: 召回负样本选择,会采用一些策略进行负样本采样。 粗排打分空间已经变小,曝光样本和打分样本差异相对较小,曝光对粗

227.Mock Hanoi Tower by Stacks-用栈模拟汉诺塔问题(容易题)

用栈模拟汉诺塔问题 题目 在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限制条件: (1) 每次只能移动一个盘子。 (2) 每个盘子从堆的顶部被移动后,只能置放于下一个堆中。 (3) 每个盘子只能放在比它大的盘子上面。 请写一段程序,实现将第一个堆