HDU 2077 汉诺塔IV 递归 通项公式
刚刚做的HDU 2064很好找规律,
回忆一下:
b[1] = 2;
b[n] = b[n-1] *3 + 2;
可得b[n]= 3^n-1
不懂的传送门http://blog.csdn.net/murmured/article/details/9457035
这题题目差不多,就是放宽条件,但只允许把最大的放在最上面。
其实我看的时候没有仔细想。。。它的输入已经暴露了它的公式。因为两题差不多,所以应该也是与3的n次幂有关。计算3的10次为59049 超过了?等等/3看看!3的9次方为19683,于是大胆猜测公式为a[n]= 3^(n-1)+1,直接AC掉。
Sample Input
2
1
10
Sample Output
2
19684
那么如何得到那个式子呢?
把n-2个移动到C,由于允许最大的那个盘子放上面,所以n-1到B,n到B,n-2到A,n到C,n-1到c,剩下的n-2和刚才那题一样!
故得a[n] =b[n-2] *3 + 4;(注意这里是b[n-2],不是a[n-2])
带入刚才的式子得:a[n] =( 3^(n-2)-1)*3+4=3^(n-1)+1
那么递推式呢?有了通项公式,递推式也呼吁而出:
a[1] = 2;
a[n] = a[n-1] *3 -2;
好了上代码说到这了,代码好像是多余的了。。。^ ^
递推版:
#include <iostream>
using namespace std;
const int MAXN=64;
int main()
{
int T;
__int64 a[MAXN];
a[1] =2;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
for(int i=2;i<=n;i++)
a[i] = a[i-1] *3 -2;
printf("%I64d\n",a[n]);
} }
直接公式:
#include <iostream>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
long long x=1;
for(int i=1;i<n;i++)
x*=3;
printf("%I64d\n",++x);
}
}
HDU 2077 汉诺塔IV 递归 通项公式的更多相关文章
- HDU 2077 汉诺塔IV (递推)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2077 还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是 ...
- HDU 2077 汉诺塔IV (递推)
题意:... 析:由于能最后一个是特殊的,所以前n-1个都是不变的,只是减少了最后一个盘子的次数,所以根据上一个题的结论 答案就是dp[n-1] + 2. 上一题链接:http://www.cnblo ...
- HDU 2064 汉诺塔III(递归)
题目链接 Problem Description 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘 ...
- 2077 汉诺塔IV
Problem Description 还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到小盘的上面.xhd在想 ...
- 汉诺塔III 汉诺塔IV 汉诺塔V (规律)
汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- 从"汉诺塔"经典递归到JS递归函数
前言 参考<JavaScript语言精粹> 递归是一种强大的编程技术,他把一个问题分解为一组相似的子问题,每一问题都用一个寻常解去解决.递归函数就是会直接或者间接调用自身的一种函数,一般来 ...
- 用C语言实现汉诺塔自动递归演示程序
用C语言实现汉诺塔自动递归演示程序 程序实现效果 1.变界面大小依照输入递归数改变. 2.汉诺塔自动移动演示. 3.采用gotoxy实现流畅刷新. 4.保留文字显示递归流程 程序展示及实现 githu ...
- 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI
汉诺塔 汉诺塔II hdu1207: 先说汉若塔I(经典汉若塔问题),有三塔.A塔从小到大从上至下放有N个盘子.如今要搬到目标C上. 规则小的必需放在大的上面,每次搬一个.求最小步数. 这个问题简单, ...
- HDU 1207 汉诺塔II (找规律,递推)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1207 汉诺塔II Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- virtual与override
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- jquery插件库http://www.jq22.com/
http://www.jq22.com/ http://www.jq22.com/jquery/%E5%8A%A0%E8%BD%BD http://www.jq22.com/jquery/%E5%BC ...
- Impala数据处理(加载和存储)
不多说,直接上干货! Hive与Impala都是构建在Hadoop之上的数据查询工具,那么在实际的应用中,它们是如何加载和存储数据的呢? Hive和Impala存储和加载表,和所有的关系型数据库一样, ...
- Linux下几种另类创建文件之方法
以前我们用编辑器例如vi来新建文件,下面介绍几种另类生成文件的方法,多用在备份和测试上. 创建文件的方法: 1.echo 命令 #echo "set bell" >& ...
- 使用Vue动态生成form表单
form-create 表单生成器 具有数据收集.校验和提交功能的表单生成器,支持双向数据绑定和事件扩展,组件包含有复选框.单选框.输入框.下拉选择框等表单元素以及省市区三级联动,时间选择,日期选择, ...
- RGB 颜色空间转 HSI 颜色空间的matlab程序实现
RGB 颜色空间转 HSI 颜色空间的matlab程序实现 2014.10.20之前的内容有误,这里依据wikipedia更新了算法内容. 算法以wiki为准 https://en.wikipedia ...
- elasticsearch java 客户端之Client简介
elasticsearch通过构造一个client对外提供了一套丰富的java调用接口.总体来说client分为两类cluster信息方面的client及数据(index)方面的client.这两个大 ...
- 在Fedora 14 alpha 下测试Kvm情况(视频)
今天刚忙完,便抽空做了fc14下的虚拟机的测试,总体感觉在2.6.35的kernel下启动和配置虚拟机的速度比原来要快乐许多,下面就带着各位体验一下吧.(硬件测试环境:IBM R52,2g内存,物理机 ...
- 八、Docker+RabbitMQ
原文:八.Docker+RabbitMQ 一.下载镜像 docker pull rabbitmq:management 二.运行 docker run -d --name rabbitmq -e TZ ...
- C#创建子线程,子线程使用委托更新控件
一.背景 由于在窗体程序中通过点击一个button按键后需要更新TreeView控件的内容,由于等待时间比较长,主程序无法一起在那边等待,需要去处理其它的事情,所以就需要创建新的子线程来处理.因为主线 ...