jzoj 6797. 【2014广州市选day2】hanoi
Description
你对经典的hanoi塔问题一定已经很熟悉了。有三根柱子,n个大小不一的圆盘,要求大盘不能压在小盘上,初始时n个圆盘都在第一根柱子上,最少要多少步才能挪到最后一根柱子上?
现在我们来将hanoi塔扩展一下,由三根柱子扩展到四根柱子,其余规则不变。例如,3个圆盘,四根柱子A到D,初始时圆盘都A柱上,我们用五步就可以将圆盘都挪到D柱上:
第一步:将圆盘1从A挪到B;
第二步:将圆盘2从A挪到C;
第三步:将圆盘3从A挪到D;
第四步:将圆盘2从C挪到D;
第五步:将圆盘1从B挪到D。
你的任务是写一个程序求解四柱子hanoi塔问题最少要多少步可以解决。
Input
输入只有一行,为一个正整数n。(1<=n<=1000)
Output
输出为一个正整数,代表n盘四柱子hanoi塔问题最少要多少步可以解决。
Solution
在做经典汉诺塔问题的时候,我们是用递推求出n个盘子时的步数的,我们做这道题的时候也就类比,尝试是否能够递推解决问题
以下是前10个数的表
盘子数 | 步数 |
---|---|
1 | 1 |
2 | 3 |
3 | 5 |
4 | 9 |
5 | 13 |
6 | 17 |
7 | 25 |
8 | 33 |
9 | 41 |
10 | 49 |
... | ... |
观察上面的表格,我们发现,从1个盘子到2个盘子与2个到3个各增加了2步即\(2^{1}\)步;从3个到4个、从4个到5个与从5个到6个各增加了4步即\(2^{2}\)步,以此类推,我们做出猜想
\]
其中\(k \in N^{*}\)且是递增的
对于\(2^{k}\)会加(k+1)次
数据\(n \leqslant 1000\)所以直接递推就好
#include <cstdio>
#include <algorithm>
#define open(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
using namespace std;
int n,cnt,num,i;
long long add,f[1001];
int main()
{
open("hanoi");
scanf("%d",&n);
f[1]=1;f[2]=3;f[3]=5;
add=4;cnt=3;num=3;
for (i=4;i<=n;i++)
{
f[i]=f[i-1]+add;
cnt--;
if (!cnt) cnt=++num,add*=2;
}
printf("%lld",f[n]);
return 0;
}
jzoj 6797. 【2014广州市选day2】hanoi的更多相关文章
- jzoj 6798. 【2014广州市选day2】regions
Description 在平面上堆叠着若干矩形,这些矩形的四边与平面X坐标轴或Y坐标轴平行.下图展示了其中一种情况,3个矩形的边将平面划分成8个区域: 下面展示了另一种稍稍复杂一些的情况: 你的任务是 ...
- 【2014广州市选day1】JZOJ2020年9月12日提高B组T4 字符串距离
[2014广州市选day1]JZOJ2020年9月12日提高B组T4 字符串距离 题目 Description 给出两个由小写字母组成的字符串 X 和Y ,我们需要算出两个字符串的距离,定义如下: 1 ...
- 【2014广州市选day1】JZOJ2020年9月12日提高B组T3 消除游戏
[2014广州市选day1]JZOJ2020年9月12日提高B组T3 消除游戏 题目 Description 相信大家玩过很多网络上的消除类型的游戏,一般来说就是在一个大拼图内找出相同的部分进行最大程 ...
- 【2014广州市选day1】JZOJ2020年9月12日提高B组T2 导弹拦截
[2014广州市选day1]JZOJ2020年9月12日提高B组T2 导弹拦截 题目 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统 V1.0.但是这种导弹拦截系统有一个缺 ...
- 【JZOJ3601】【广州市选2014】Tree(tree)
╰( ̄▽ ̄)╭ 每个非叶子节点,其左右子树叶子节点的权值之和相等.我们称这种二叉树叫平衡二叉树. 我们将一棵平衡二叉树叶子节点的权值从左到右列出来,假如这个权值序列是另一个序列A的子序列,我们称这棵平 ...
- SCOI 2014 省选总结
总的来说作为高一党,去做省选难度的题完全就是去玩的,还是找惯例起身跪hja. 跪毕,看看自己惨不忍睹的成绩,我只想说:电子坑大为什么day1的暴力只有10分!为什么呢?我笑看题面: 方伯伯种玉米,方伯 ...
- NOIP 2014 提高组 Day2
期望得分:100+60+30=190 实际得分:70+60+30=160 https://www.luogu.org/problem/lists?name=&orderitem=pid& ...
- JZOJ 1003【东莞市选2007】拦截导弹——dp
题目:https://jzoj.net/senior/#main/show/1003 只要倒推一下第一次上升的最长和第一次下降的最长就行了.不用n^2logn,枚举了 j 还要用树状数组找值比自己大的 ...
- 2014 网选 上海赛区 hdu 5047 Sawtooth
题意:求n个'M'型的折线将一个平面分成的最多的面数! 思路:我们都知道n条直线将一个平面分成的最多平面数是 An = An-1 + n+1 也就是f(n) = (n*n + n +2)/2 对于一个 ...
随机推荐
- for语句——猜数字
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib. ...
- Spark优化之小文件是否需要合并?
我们知道,大部分Spark计算都是在内存中完成的,所以Spark的瓶颈一般来自于集群(standalone, yarn, mesos, k8s)的资源紧张,CPU,网络带宽,内存.Spark的性能,想 ...
- Golang Gtk+3教程:Grid布局
在上个例子中我们使用了box布局,现在让我们来学习另一种布局--grid.其实这几种布局都大同小异,如果你看懂了上一个例子,想必使用grid也不是难事. 程序运行效果: package main im ...
- python基本数据类型(三)
字典{} 冒号前面是key(键)冒号后面是values(值) 键:值 ==键值对 1.索引 s={ 'name':'lifei', 'age':'', 'sex':'man' } print(s[' ...
- JDK1.8源码学习-HashMap
JDK1.8源码学习-HashMap 目录 一.HashMap简介 HashMap 主要用来存放键值对,它是基于哈希表的Map接口实现的,是常用的Java集合之一. 我们都知道在JDK1.8 之前 的 ...
- 【小白学AI】随机森林 全解 (从bagging到variance)
文章转自公众号[机器学习炼丹术],关注回复"炼丹"即可获得海量免费学习资料哦! 目录 1 随机森林 2 bagging 3 神秘的63.2% 4 随机森林 vs bagging 5 ...
- 编译u-boot时候,make distclean 出现rm:无法删除,****是一个目录
今天在编译u-boot的时候,make distclean,出现了rm:无法删除 "include/asm-arm/arch": 是一个目录.经过查看网友的解决办法,已经解决了. ...
- Jmeter 常用函数(10)- 详解 __threadNum
如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.html 作用 返回当前线程组产生的线程的线程编号 语 ...
- 极简 Node.js 入门 - 3.2 文件读取
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- CentOS 阿里源
[centos] name=centos baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/ enabled= gpgcheck= [epel] ...