题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1207

四柱汉诺塔问题

当 r = (sqrt(8*n+1)-1)/2 时,

存在 count = (n-(r*r-r+2)/2)*(int)pow(2,r)+1 ,此时所需的步骤最少。

 #include<stdio.h>
#include<math.h> int main()
{
int n,r;
long long int count;
while(scanf("%d",&n)!=EOF)
{
r = (sqrt(*n+)-)/;
count = (n-(r*r-r+)/)*(int)pow(,r)+;
printf("%I64d\n",count);
}
return ;
}

还有一种方法,模拟三柱汉诺塔问题

三柱汉诺塔的步骤是:

(1)把n-1个盘子移动到B柱上

(2)把第n个盘子移动到C柱上

(3)把n-1个盘子移动到C柱上

那么四柱汉诺塔的步骤为:

(1)把n-k个盘子移动到B柱上

(2)把k个盘子移动到C柱上

(3)把n-k个盘子移动到C柱上

一开始我以为k=2,所以得到的结果不是最小,那么应该用for循环从1到n都计算一遍找到能使结果最小的k值。

将k个盘子移动到C柱上的步骤就是三柱汉诺塔问题,题目已经给出最小步骤为2^k-1

而1和3步骤所需最小步数一样,那么Hanoi[n]=a[k]+2*a[n-k],a[k]=pow(2,k)-1。

注意该题的数据容易溢出,所以我定义数据类型为double

代码如下:

#include<stdio.h>
#include<math.h> int main()
{
int n;
double a[],Hanoi[],k1,k2;
int i,j;
for(i = ;i <= ;i++)
a[i] = pow(,i) - ;
Hanoi[] = ;
for(i = ;i <= ;i++)
{
k1=a[i];
for(j = ;j < i;j++)
{
k2 = a[j] + *Hanoi[i-j];
if(k1 > k2)
k1 = k2;
}
Hanoi[i] = k1;
}
while(scanf("%d",&n)!=EOF)
{
printf("%.f\n",Hanoi[n]);
}
return ;
}

Hanoi

HDU 1207的更多相关文章

  1. HDU 1207 汉诺塔II (找规律,递推)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1207 汉诺塔II Time Limit: 2000/1000 MS (Java/Others)     ...

  2. hdu 1207 四柱汉诺塔

    递推,汉诺塔I的变形. 这题真心没想到正确解法,越想越迷糊.这题看了别人题解过得,以后还是自己多想想,脚步太快并非好事. 贴上分析:   分析:设F[n]为所求的最小步数,显然,当n=1时,F[n]= ...

  3. HDU 1207 汉诺塔II (递推)

    经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘.上 ...

  4. hdu 1207 汉诺塔II (DP+递推)

    汉诺塔II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  5. HDU 1207 汉诺塔II (简单DP)

    题意:中文题. 析:在没有第四个柱子时,把 n 个盘子搬到第 3 个柱子时,那么2 ^ n -1次,由于多了一根,不知道搬到第四个柱子多少根时是最优的, 所以 dp[i] 表示搬到第4个柱子 i 个盘 ...

  6. HDU 2064 菜鸡第一次写博客

    果然集训就是学长学姐天天传授水铜的动态规划和搜索,今天讲DP由于困意加上面瘫学长"听不懂就是你不行"的呵呵传授,全程梦游.最后面对连入门都算不上的几道动态规划,我的内心一片宁静,甚 ...

  7. HDU 汉诺塔系列

    做了这一系列题,表示对汉诺塔与这一系列递推理解加深了 经典汉诺塔:1,2,...,n表示n个盘子,数字大盘子就大,n个盘子放在第1根柱子上,按照从上到下 从小到大的顺序排放,过程中每次大盘都不能放在小 ...

  8. HDU——PKU题目分类

    HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...

  9. [转] HDU 题目分类

    转载来自:http://www.cppblog.com/acronix/archive/2010/09/24/127536.aspx 分类一: 基础题:1000.1001.1004.1005.1008 ...

随机推荐

  1. 使用dom4j解析xml文件,并封装为javabean对象

    dom4j是一个java的XML api,性能优异.功能强大.易于使用.这里使用dom4j对xml文件进行解析,并完成对文件的封装. 实现对xml文件的解析,主要使用到的是dom4j中的SAXRead ...

  2. jquery+正則表達式验证邮箱格式的样例

    js: $("#email").blur(function(){ //获取id相应的元素的值,去掉其左右的空格 var email = $.trim($('#email').val ...

  3. android 47 service绑定

    如果一个service已经启动了,activity和service绑定了在解除邦定,则这个service不会销毁,因为这个service不是这个Activity创建的. service生命周期: Ac ...

  4. oracle 常用博客网址

    使用oradebug修改数据库scn – 提供专业ORACLE技术咨询和支持@Phone13429648788 - 惜分飞 Solaris上使用DTrace进行动态跟踪 老熊的三分地-Oracle及数 ...

  5. OOP 概述

    面向对象程序设计基于四个基本概念:数据抽象.封装.继承和动态绑定. 类的基本思想是数据抽象和封装. 1 数据抽象 数据抽象是一种依赖于接口和实现分离的编程技术.类的接口包括用户所能执行的操作:类的实现 ...

  6. jboss 7 as1 日志配置

    原文地址:https://docs.jboss.org/author/display/AS71/Logging+Configuration Overview The overall server lo ...

  7. [转] 再叙TIME_WAIT

    http://huoding.com/2013/12/31/316 之所以起这样一个题目是因为很久以前我曾经写过一篇介绍TIME_WAIT的文章,不过当时基本属于浅尝辄止,并没深入说明问题的来龙去脉, ...

  8. TCP/IP协议原理与应用笔记13:底层网络技术之传输介质

    1. 有线介质----导线管(导向媒体) • 双绞线 Twisted-pair cable • 同轴电缆 Coaxial cable 金属铜导线,电流 • 光纤 Fiber-optic cable   ...

  9. css考核点整理(十)-响应式开发经验,响应式页面的三种核心技术是什么

    响应式开发经验,响应式页面的三种核心技术是什么

  10. css培训(三)

    优先级 z-index 不设置 或auto   非static z-index :0 : z-index:-1: opacity 与层叠上下 opacity:.9 对其影响  小于1值   不具备堆叠 ...