ACwing96 奇怪的汉诺塔 递推
时间:2019-11-16
本文章向大家介绍ACwing96 奇怪的汉诺塔 递推,主要包括ACwing96 奇怪的汉诺塔 递推使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
网址:https://www.acwing.com/problem/content/98/
题意:
求$4$个塔的$$Hanoi$塔问题的最小移动步数。
题解:
三个塔时,我们知道将$n$个盘移动到一个塔的最小次数是$2^{n}-1$,令其为$d[n]$,对于$n+1$个盘,则为$(2×d[n])+1$(先移$n$个组成一个塔然后移底座,再把它们归位),所以对于$4$个塔时,我们先把$i$个盘子移动到一个塔,剩下的$n-i$个盘子转化成三个塔的问题,枚举$i$求最小值即可。
实际上,推广到$m$个塔$n$个盘的情况时,由$Frame-Stewart$算法,有最小次数:
(参考博客:https://blog.csdn.net/pijk55556/article/details/100527696)
AC代码:
#include <bits/stdc++.h> using namespace std; long long dp[15], f[15]; int main() { dp[1] = 1; for (int i = 2; i <= 12; ++i) dp[i] = (dp[i - 1] << 1) + 1; f[1] = 1; for (int i = 2; i <= 12; ++i) { f[i] = (f[1] << 1) + dp[i - 1]; for (int j = 2; j < i; ++j) f[i] = min(f[i], (f[j] << 1) + dp[i - j]); } for (int i = 1; i <= 12; ++i) printf("%lld\n", f[i]); return 0; }
原文地址:https://www.cnblogs.com/Aya-Uchida/p/11873152.html
- hadoop系列之基础系列
- Spark的调度系统
- Spark Structured Streaming的高效处理-RunOnceTrigger
- Spark度量系统相关讲解
- Spark Structured Streaming高级特性
- Table API&SQL的基本概念及使用介绍
- 使用Linq to Sql 创建数据库和表
- Flink DataSet编程指南-demo演示及注意事项
- 解决 wcf HTTP 无法注册 另一应用程序正在使用 TCP 端口 80
- 构建Flink工程及demo演示
- F-Stack之kqueue封装为epoll介绍
- wcf http 返回图片
- F-Stack与Seastar对比
- Flink DataStream编程指南及使用注意事项。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- LeetCode 04寻找两个正序数组的中位数(困难)二分法
- Java程序员面试必备:Volatile全方位解析
- HTTP协议基础及发展历史
- Vi 和 Vim 的使用
- k8s删除Terminating状态的命名空间
- CentOS7下vsftpd over SSL/TLS加密传输配置实践
- Xargs Sh -c Skipping the First Argument
- Centos系统安装
- Python 为什么能支持任意的真值判断?
- Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?
- Python计算大文件行数方法及性能比较
- docker容器部署Prometheus服务——云平台监控利器
- ASP.NET Core 奇技淫巧之接口代理转发
- 基于CDH(Cloudera Distribution Hadoop)的大数据平台搭建
- troubleshoot之:用control+break解决线程死锁问题