四柱子汉诺塔—递归—递推
三塔:递推式:d[n] = 2 * d[n-1] + 1
即把前n-1个盘子从A柱移到B柱,然后把A柱上剩的那一个盘子移动到C柱,最后把B柱上的那n-1个盘子移动到C柱上
四塔:递推式:f[n] = min{2 * f[i] + d[n - i]}
初始化:f[1] = 1(一个盘子在4塔模式下移动到D柱需要1步)
先把i个盘子在4塔模式下移动到B柱,
然后把n-i个盘子在3塔模式下移动到D柱(因为不能覆盖到B柱上,就等于只剩下A、C、D柱可以用)
最后把i个盘子在4塔模式下移动到D柱
考虑所有可能的i取最小值,即得到上述递推公式
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int d[10000], f[10000];
int main() {int n;cin >> n;d[1] = 1;for (int i = 2; i <= n; i++)d[i] = 2 * d[i - 1] + 1;memset(f, 0x3f3f3f3f, sizeof(f));f[1] = 1;for (int i = 2; i <= n; i++)for (int j = 1; j < i; j++)f[i] = min(f[i], 2 * f[j] + d[i - j]);for (int i = 1; i <= n; i++)cout << f[i] << endl;return 0;
}
四柱子汉诺塔—递归—递推相关推荐
- 四柱子汉诺塔c语言程序代码,汉诺塔n=4(4个盘)c语言递归编程代码
满意答案 /**************************** 汉诺塔的算法就3个步骤: 第一,把a上的n-1个盘通过c移动到b. 第二,把a上的最下面的盘移到c.a成了空的. 第三,因为n-1 ...
- hdu 2064汉诺塔III 递推
汉诺塔递推题,比汉诺塔多了一个限制条件,盘子只允许在相邻的柱子之间移动. 分析: 第1步:初始状态: 第2步:把上面的n-1个盘移到第3号杆上: 第3步:把第n个盘从1移到2: 第4步:把前n-1个从 ...
- 96. 奇怪的汉诺塔【递推】
这是一道很经典的问题. 先看3个塔的情况 需要注意的是,这里的汉诺塔移动并无只可以移动到相邻塔的需求.即可以直接从A移到C. 设d[i]表示将i个盘子从这里移到其他除它之外塔的步数 ,总塔的数量为3 ...
- 汉诺塔VII(递推,模拟)
汉诺塔VII Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 96. 奇怪的汉诺塔:递推
文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 本题的汉诺塔问题是n个盘子4个塔,最基本的汉诺塔是n个盘子3个塔.本题是要在后者的基础上来做. 设d[i]表示i盘3塔问题的最小移动 ...
- Strange Towers of Hanoi 汉诺塔问题及其升级(递推)四个汉诺塔问题
今天学习递推的汉诺塔问题,非常的有趣 文章目录 1.汉诺塔问题来源 分析 2.Strange Towers of Hanoi[DP][递推] 题目大意: 思考 解题步骤: 1.汉诺塔问题来源 汉诺塔( ...
- 三柱汉诺塔四柱汉诺塔
汉诺塔问题_哔哩哔哩_bilibili 三柱汉诺塔,从整体来看,分为三部 1.先让n-1个盘先由a柱放在b柱 2.把第n个盘由a柱放在c柱 3.将这n-1个盘由b柱移动到c柱 而其中的递归过程就是直到 ...
- 数据结构之栈与递归的应用(汉诺塔递归解法)
上一节简单的讲述了递归的实现与简单应用,接下来我们说一下另一个经典应用. 汉诺塔递归解法 一.起源: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子, ...
- 汉诺塔递归的c语言实现(递归)
对于递归来讲, 汉诺塔实际是经典到不能再经典的例子了, 每个数据结构的教材对会提到. 但是到最后只给出一段类似下面的一段代码: #include<stdio.h>void move(i ...
最新文章
- 增强现实:一场正在到来的医疗革命
- PostgreSQL操作问题(转载)
- [MySql] - 解决部署的服务器没有安装MySql Connector
- C# 获取鼠标相对当前窗口坐标的方法
- Java通过Executors提供四种线程池
- feignclient注解使用_从 Feign 使用注意点到 RESTFUL 接口设计规范
- where T:new() 是什么意思
- 深入理解DDD中的聚合
- git解决error: failed to push some refs to ‘xxx(远程库)‘
- select * from什么意思_SQL入门教程第15课:什么是内连接
- 1.maven下仅shiro框架对shiro的测试使用
- matlab画圆的命令_matlab画圆命令
- 全面升级,淘宝/天猫api接口大全
- 计算机中win是哪个版本,win7系统应该选择哪个版本比较好
- 09-10c语言试卷a,09C语言试卷A-B(试题).doc
- PL/SQL语言简单案例
- redmi k60参数 红米k60怎么样 redmi k60优缺点
- Meld——目录文件对比工具
- vivado生成bit流错误:Combinatorial Loop Alert
- filetransferdmg魅族下载_filetransfer.dmg魅族下载
热门文章
- Mathematica,亮瞎你的双眼
- cadence版图设计步骤(包括drc和lvs)
- JAVA内存分析:基于dump内存溢出快照分析
- Hrm-人力资源系统开发笔记05
- Web开发应了解的5种设计模式
- 苹果手机悬浮窗怎么打开_悬浮窗搜题神器_悬浮窗搜题神器app源码苹果软件预约 v1.0...
- 【学习日记2023.6.9】之 SpringCloud入门(认识微服务_服务拆分和远程调用RestTemplate_Eureka注册中心_Ribbon负载均衡_Nacos注册中心)
- 判断输入年份是否是闰年
- 快递100 查询物流信息 Java
- 验证phone是否注册微信