【BZOJ】1019: [SHOI2008]汉诺塔

go语言实现服务器server端与客户client端即时通信(附完整源码) 阅读详情

  不做太多墨迹,汉诺塔,直接递归,爆栈

题目:汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成。一开始n个盘子都摞在柱子A上,
大的在下面,小的在上面,形成了一个塔状的锥形体。

 

  对汉诺塔的一次合法的操作是指:从一根柱子的最上层拿一个盘子放到另一根柱子的最上层,同时要保证被移
动的盘子一定放在比它更大的盘子上面(如果移动到空柱子上就不需要满足这个要求)。我们可以用两个字母来描
述一次操作:第一个字母代表起始柱子,第二个字母代表目标柱子。例如,AB就是把柱子A最上面的那个盘子移到
柱子B。汉诺塔的游戏目标是将所有的盘子从柱子A移动到柱子B或柱子C上面。有一种非常简洁而经典的策略可以帮
助我们完成这个游戏。首先,在任何操作执行之前,我们以任意的次序为六种操作(AB、AC、BA、BC、CA和CB)
赋予不同的优先级,然后,我们总是选择符合以下两个条件的操作来移动盘子,直到所有的盘子都从柱子A移动到
另一根柱子:(1)这种操作是所有合法操作中优先级最高的;(2)这种操作所要移动的盘子不是上一次操作所移
动的那个盘子。可以证明,上述策略一定能完成汉诺塔游戏。现在你的任务就是假设给定了每种操作的优先级,计
算按照上述策略操作汉诺塔移动所需要的步骤数。

Input

  输入有两行。第一行为一个整数n(1≤n≤30),代表盘子的个数。第二行是一串大写的ABC字符,代表六种操
作的优先级,靠前的操作具有较高的优先级。每种操作都由一个空格隔开。

Output

  只需输出一个数,这个数表示移动的次数。我们保证答案不会超过10的18次方。

Sample Input

3
AB BC CA BA CB AC

Sample Output

7



#include <iostream>  
#include <algorithm>  
#include <cstdio>  
#include <cstring>  
#include <string>  
#include <cstdlib>  
#define LL long long  
using namespace std;  
int v[5],n,g[5][50];  
LL f[5][50];  
int main()  
{  
	scanf("%d",&n);  
	for (int i=1;i<=6;i++)  
	{  
		char s[5];  
		scanf("%s",s);  
		int from=s[0]-'A'+1,to=s[1]-'A'+1;  
		if (v[from]) continue;  
		v[from]=1;  
		g[from][1]=to,f[from][1]=1;  
	}  
	for (int i=2;i<=n;i++)  
		for (int j=1;j<=3;j++)  
		{  
			int y=g[j][i-1];  
			int z=6-y-j;  
			f[j][i]=f[j][i-1]+1;  
			if (z==g[y][i-1])  
			{  
				f[j][i]+=f[y][i-1];  
				g[j][i]=z;  
			}  
			else  
			{  
				f[j][i]+=f[y][i-1]+1+f[j][i-1];  
				g[j][i]=y;  
			}  
		}  
		cout<<f[1][n]<<endl;  
		return 0;  
}  

有借鉴自论坛

未来的我一定会感谢现在正在成长的我!

解决gradle下载慢的问题 allprojects块的repositories用于多项目构建,为所有项目提供共同所需依赖包。而子项目可以配置自己的repositories以获取自己独需的依赖包。buildScript块的repositories主要是为了Gradle脚本自身的执行,获取脚本依赖插件。根级别的repositories主要是为了当前项目提供所需依赖包。慢的问题在于下载时链接的是官网,而官网下载速度太慢;1、解决gradle不同版本下载慢的问题。但是这个镜像站的版本不全,低版本可以用;有公司做的国内镜像站; 阅读详情

相关推荐

单细胞转录组上游分析完整流程(超详细)

本指南详细介绍单细胞转录组数据分析流程,从10xGenomics平台数据出发,使用CellRanger工具完成从原始FASTQ文件到基因表达矩阵的全过程。内容涵盖:1) 环境准备与参考基因组获取;2) 测试数据下载;3) 数据质量检测方法;4) CellRanger核心流程详解;5) 结果解读;6) 下游分析衔接。同时提供开源替代方案kallisto|bustools的使用说明,并解答常见问题。适合单细胞转录组分析初学者快速掌握标准分析流程。

Rita_rr的博客 1158

[SHOI2008]汉诺塔

提交:bzoj1019 题目↑↑这道题是更高级的汉诺塔(也不是很高。。),这道题加了一个优先级排列,所以情况多了一种。 正常汉诺塔公式:f[i]=f[i-1]*2+1; 这道题要加一维来表示放的盘数 f[i][j] 表示在第i个塔中取j个的最小步数 p[i][j]表示在第i个塔中取j个盘,这些盘放的位置#include<cstdio> #include<cstring> #include<

Nick_星海 633

将雷达连接到树莓派的串口

dev/ttyAMA0 是树莓派的主要 UART(用于 GPIO 引脚 8 (TXD) 和 10 (RXD))。通常,树莓派使用 GPIO 引脚 8 (TXD) 和 10 (RXD) 进行串口通信。树莓派上通常有两个串口:/dev/ttyS0 和 /dev/ttyAMA0。你需要确认雷达的 TX 和 RX 引脚,并与树莓派的对应引脚连接。VCC(电源)连接到树莓派的 3.3V 或 5V(根据雷达的要求)MR(Receive)连接到树莓派的 GPIO 8 (TXD)GND(地)连接到树莓派的 GND。

qq_45943628的博客 1466

Python汉诺塔问题

一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体。对汉诺塔的一次合法的操作是指:从一根柱子的最上层拿一个盘子放到另一根柱子的最上层,同时要保证被移动的盘子一定放在比它更大的盘子上面(如果移动到空柱子上就不需要满足这个要求)。#分三步解决这个问题 第一步 使用同样的方法将n-1个圆盘从a柱移到b柱。#第三步 用第一步的·方法将n-1个圆盘从b柱移到c柱。# 最后将n-1个盘子从b移动到c。# 先将n-1个盘子从a移动到b。# 再将第n个盘子从a移动到c。

qingcheng_123456的博客 759

从零构建XVC协议栈:FPGA+W5300的跨界调试架构实战

本文详细介绍了如何从零构建XVC协议栈,通过FPGA与W5300以太网控制器的创新组合实现跨界调试架构。重点解析了JTAG时序逆向、TCP/IP协议栈集成与XVC协议实现,提供了硬件设计优化和性能加速技术,为嵌入式开发者和FPGA工程师提供实用的远程调试解决方案。

raspberrypi5的博客 247

手把手教你用Verilog实现MDIO控制器(附完整VHDL代码对比)

本文详细介绍了如何使用Verilog实现MDIO控制器,并提供了与VHDL实现的深度对比。通过解析MDIO协议核心要点,展示Verilog状态机架构设计和关键时序控制逻辑,同时对比VHDL在信号声明、状态机实现和双向端口处理上的差异。适用于以太网硬件设计开发者,帮助掌握MDIO控制器自主实现能力。

weixin_30682415的博客 422

BZOJ_1019_[SHOI2008]_汉诺塔_(DP)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1019 汉诺塔游戏,但是有移动优先级,在不违反原有规则的情况下,给定优先移动目标.求完成游戏所需的步数. 分析 我们用\(f[j][i]\)表示把第\(j\)个柱子上的最上面\(i\)个盘子移走所需的步数,用\(g[j][i]\)表示会移动到哪个柱子上. 那么对...

aquz77529的博客 230

Open3D:Win10 + VS2017配置Open3D(C++、python)

一、下载源码 地址:https://github.com/intel-isl/Open3D 1.1 克隆源码【笔者的源码路径为D:\Open3D\Open3D】 1.2 切换版本【笔者的版本为0.8.0】 1.3 更新子模块【用于获取第三方库!很重要!】 二、CMake编译 2.1 设置路径 【source code: D:\Open3D\Open3D;build binaries: D:\Open3D】 【笔者设置CMAKE/CMAKE_INSTALL_PREFIX的路径为D:/Open.

累了就要打游戏 1万+

BZOJ 1019: [SHOI2008]汉诺塔

二次联通门 :BZOJ 1019: [SHOI2008]汉诺塔 /* BZOJ 1019: [SHOI2008]汉诺塔 我是代码的搬运工,啦啦啦 真心不明白QAQ */ #include <cstdio> #define rg register #define Max 35 typedef long long ...

weixin_30652879的博客 89

电力电子技术(13)——大功率可控整流电路

目录引言2.6.1 带平衡电抗器的双反星形可控整流电路电路结构的特点接平衡电抗器的原因平衡电抗器使得两组三相半波整流电路同时导电的原理分析谐波分析2.6.2 多重化整流电路概述原理目标1)移相多重联结2)多重联结电路的顺序控制3重晶闸管整流桥顺序控制带平衡电抗器的双反星形可控整流电路(是多重化整流电路的重要形式之一)的特点:适用于低电压、大电流的场合。多重化整流电路的特点:绕组的极性相反的目的:消除直流磁通势如图所示,虽然两组相电流的瞬时值不同,但是平均电流相等而绕组的极性相反,所以直流安匝(电流*匝数)互

weixin_45589295的博客 1万+

大模型应用开发面试全流程实录:RAG、上下文工程与多Agent协作技术深度解析

Transformer 依靠多头自注意力和位置编码实现高效序列建模。Prompt Engineering包含多种设计思路,如 Zero-shot、Few-shot、Chain-of-thought,提升模型泛化和推理。Token 和上下文窗口直接影响模型性能与成本,选择需结合实际业务场景(如客服对话需长窗口)。Embedding 技术是 RAG 的基础,决定了语义检索效果。向量数据库如 FAISS、Milvus等分别适用于本地/分布式检索。

m0_52114506的博客 828

BZOJ1019: [SHOI2008]汉诺塔

BZOJ1019 Description  汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成。一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体。    对汉诺塔的一次合法的操作是指:从一根柱子的最上层拿一个盘子放到另一根柱子的最上层,同时要保证被移动的盘子一定放在比它更大的盘子上面(如果移动到空柱子上就不需要满足这个要求)。我们可以用两个字母

Circus 634

【OpenClaw从入门到精通】第34篇:医疗AI的“Agent OS”时代:基于WiseClaw构建医院专属智能体平台(2026实测版)

2026年医疗AI迈入实战落地新阶段,全球首个医疗OpenClaw平台WiseClaw正式发布,香港中文大学(深圳)医院完成业内首个私有化部署。本文基于真实医疗场景需求与公开技术资料,系统拆解医疗智能体平台的建设逻辑:从医疗Agent OS的五大核心特性切入,详解门诊病历质控、用药审查、医院运行管理三大临床场景的智能体搭建流程,提供完整的私有化部署代码、安全配置方案与实操演示。文章兼顾新手入门与进阶需求,严格遵循医疗合规要求,强调“只读不写+人工复核”原则,所有方案均经过虚拟实测验证。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 788

bzoj 1019 //1019:[SHOI2008]汉诺塔

bzoj 1019 //1019:[SHOI2008]汉诺塔 //在线测评地址https://www.lydsy.com/JudgeOnline/problem.php?id=1019 更多题解,详见https://blog.youkuaiyun.com/mrcrack/article/details/90228694BZOJ刷题记录 方法一:递推 bzoj 1019 824 kb 28 ...

mrcrack的博客 302

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

bzoj1019: [SHOI2008]汉诺塔

传送门 考虑dp方程: f[x][i]表示第x个柱子上有i个盘子,把他们都移动到g[x][i]这个柱子上要花得步数。 首先考虑i=1,因为操作有优先顺序,因此g[x][1]可以确定,f[x][1]都是1。 接下来考虑任意的i,那么我们需要把i-1个移动到g[x][i-1]上面去,再把剩下的一个移动到(1+2+3-x-g[x][i-1])上。 现在原来在x上的i个处

zyy大蒟蒻的博客 351

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

[递推] BZOJ1019: [SHOI2008]汉诺塔

题意题解显然由于有优先级存在,操作序列是唯一的。 我们设g[i][x]g[i][x] 表示一开始有i个盘在x柱,经过一系列操作,他们都到了哪个柱子上。这是唯一确定的。我们再设这个过程的操作方案数为f[i][x]f[i][x]。 这样f[n][0]f[n][0] 就是答案了。(我们用0,1,2表示柱A,B,C) 如何递推呢?联系经典的汉诺塔递推,i是由i-1得来的,我们同样用这样的思路来分析。

Lynstery's blog 824

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

bzoj1019: [SHOI2008]汉诺塔 dp

根据操作方式,易知对给定任意状态->题中目标状态的操作序列均是唯一的.所以想到递推. 结合汉诺塔&&BLAH,可想到递推方程: f[x][i] ,g[x][i] 分别表示,当前x柱上有i个圆盘,将它们移至任意另一个柱的操作数,和另一柱子的编号.(如上,这显然对任意连续的i个圆盘,都是唯一固定的) f[x][i],g[x][i] 可由 f[][i-1],g[][i-1] 推得: 汉诺塔的经典转

WJSZMRX 1117

BZOJ 1019: [SHOI2008]汉诺塔 简要证明

先安利一发Sengxian的题解。 我看了好几篇博客,几乎就两种做法:一种是跟Sengxian的做法类似的或一样的,用递推关系求^o^另一种比较玄学的是猜通项公式( ̄▽ ̄)(其实是待定系数啦) 当然我比较喜欢递推的做法,毕竟通项公式不好证明正确性(也可能是我没有多想想(´▽`)) 这里先多扯一句,汉诺塔又叫河内塔,而河内是越南首都,然而河内塔问题源于一个印度传说(´・_・`) 这篇文章就是...

yc_lrz的博客 212

【BZOJ 1019】 1019: [SHOI2008]汉诺塔 (DP?)

1019: [SHOI2008]汉诺塔 Description   汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成。一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体。   对汉诺塔的一次合法的操作是指:从一根柱子的最上层拿一个盘子放到另一根柱子的最上层,同时要保证被移动的盘子一定放在比它更大的盘子上面(如果移动到...

weixin_30732825的博客 76
上一篇: 我的主席树
下一篇: [nowcoder]牛客练习赛13 E 求最值
PragIncor
博客等级 码龄9年 1粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值