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 ...
随机推荐
- oracle空表导不出来
在oracle 11g r2中,使用exp有时候会导不出空的表,原因是这些表没有分配空间,手工分配空间即可导出. ----查询当前用户下的所有空表: select table_name from us ...
- AE 线编辑
转自原文 AE 线编辑 1.高亮显示节点 //高亮显示节点和端点 public void HighLightNode() { //清空 _mapCtrl.Map.ClearSelection(); _ ...
- 【设计模式 - 10】之外观模式(Facade)
1 模式简介 外观模式隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口.外观模式往往涉及到一个类,这个类提供了客户端请求的简化方法和对现有系统类方法的委托调用.外观模式使得系统中的 ...
- Python安装scipy
1.下载numpy+mkl 下载链接:http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy 2.下载scipy 下载链接:http://www.lfd.uc ...
- Java HexString
byte[]和十六进制字符串相互转换 Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示. 所以我们就可以把每个byte转换成两个相应的16进制字符,即把by ...
- PPT五大插件汇总下载
收集总结一下PPT制作中常用到的插件/应用,希望能帮到大家. 1.Nordri Tools NT插件是由Nordri公司开发的PPT插件,功能强大,简单易上手,设计偷懒必备神器.我们可以看看它有哪些功 ...
- ProGuard详解
综述 对于ProGuard工具想必我们都不陌生,它能够通过移除无用代码,使用简短无意义的名称来重命名类,字段和方法.从而能够达到压缩.优化和混淆代码的目的.最终我们会获取一个较小的apk文件,并且我们 ...
- 上传文件时 ContentType 浏览器差异
上传图片时,ie会把 jpg.jpeg翻译成image/pjpeg,png翻译成image/x-png . 火狐.chrome则很标准:jpg.jpeg翻译成image/jpeg,png翻译成imag ...
- 移动端 设置 小于12px 字体 初探
1.移动端字号规范 2. 百度字号调研 3. 绕过12px 限制 4. 缩放 5. chrome 字号
- Css实现透明效果,兼容IE8
Css实现透明效果,兼容IE8 >>>>>>>>>>>>>>>>>>>>> ...