HDU 1207
题目链接: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的更多相关文章
- HDU 1207 汉诺塔II (找规律,递推)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1207 汉诺塔II Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 1207 四柱汉诺塔
递推,汉诺塔I的变形. 这题真心没想到正确解法,越想越迷糊.这题看了别人题解过得,以后还是自己多想想,脚步太快并非好事. 贴上分析: 分析:设F[n]为所求的最小步数,显然,当n=1时,F[n]= ...
- HDU 1207 汉诺塔II (递推)
经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘.上 ...
- hdu 1207 汉诺塔II (DP+递推)
汉诺塔II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU 1207 汉诺塔II (简单DP)
题意:中文题. 析:在没有第四个柱子时,把 n 个盘子搬到第 3 个柱子时,那么2 ^ n -1次,由于多了一根,不知道搬到第四个柱子多少根时是最优的, 所以 dp[i] 表示搬到第4个柱子 i 个盘 ...
- HDU 2064 菜鸡第一次写博客
果然集训就是学长学姐天天传授水铜的动态规划和搜索,今天讲DP由于困意加上面瘫学长"听不懂就是你不行"的呵呵传授,全程梦游.最后面对连入门都算不上的几道动态规划,我的内心一片宁静,甚 ...
- HDU 汉诺塔系列
做了这一系列题,表示对汉诺塔与这一系列递推理解加深了 经典汉诺塔:1,2,...,n表示n个盘子,数字大盘子就大,n个盘子放在第1根柱子上,按照从上到下 从小到大的顺序排放,过程中每次大盘都不能放在小 ...
- HDU——PKU题目分类
HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...
- [转] HDU 题目分类
转载来自:http://www.cppblog.com/acronix/archive/2010/09/24/127536.aspx 分类一: 基础题:1000.1001.1004.1005.1008 ...
随机推荐
- java 运行项目不放到tomcat下的webapps文件夹下放到自己建的文件夹中的处理办法
你需要在tomcat跟目录下的conf/server.xml中进行配置,配置方法如下: <Context path="/Project" docBase="D:\s ...
- python 开发简单的聊天工具
python 太强大了,以至于它什么都可以做,哈哈,开个玩笑.但是今天要讲的真的是一个非常神奇的应用. 使用python写一个聊天工具 其实大家平时用的QQ类似的聊天工具,也是使用socket进行聊天 ...
- android 加载图片防止内存溢出
图片资源: private int fore[]; private int back[]; fore = new int[]{R.drawable.a0, R.drawable.a1, R.drawa ...
- Android开发学习之Adapter
Adapter是指适配器的意思,在Android中,适配器扮演者重要的角色,是UI与Data实现绑定的一个桥梁.Adapter负责创建和显示每个项目的子View和提供对下层数据的访问.支持Adapte ...
- C# 数组排序 基本算法 分类: C# 2014-09-25 15:43 129人阅读 评论(0) 收藏
说明:冒泡.直接插入.选择.自带方法四中基本排序算法. using System; using System.Collections.Generic; using System.ComponentMo ...
- winform 菜单项显示历史记录 分类: WinForm 2014-07-11 18:15 196人阅读 评论(0) 收藏
(1)创建一个项目,将其命名为MenuHistory,默认窗体为Form1. (2)从工具箱中向Form1窗体添加MenuStrip控件,同时向窗体添加OpenFileDialog控件.创建一个&qu ...
- maven tomcat1.7环境下构建javaweb 项目
tomcat用户权限设置 在tomcat安装路径\conf目录下tomcat-users.xml添加: <role rolename="admin-gui"/> < ...
- 在LaTeX里插入全页的pdf 分类: LaTex 2015-02-04 17:20 142人阅读 评论(0) 收藏
要帮女友排版毕业论文,需要插入封面,省时省力的方法就是把学校给的Word封面保存成PDF然后插入到Latex文档中. 首先添加下面的宏: \usepackage[final]{pdfpages} 然后 ...
- 在一台电脑访问另一台电脑的mysql数据库
1. 假设192.168.1.3为服务器 2. 首先在ip为192.168.1.103的机子上能够ping 通 运行->cmd >ping 192.168.1.3 检 ...
- 利用 Lua 实现 App 动态化方案
因为动态化的东西我第一次看实现方案的源码,而且目前还是大三的学生,缺少很多实践经验说错的地方还请原谅,也希望能指出,被告知.想了很久还是决定写出来,求大神勿喷. 并且我的一个朋友bestswifter ...