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 ...
随机推荐
- Maven属性、profile和资源过滤
Maven的六类属性 内置属性 主要有两个常用内置属性:${basedir}项目的根目录(包含pom.xml文件的目录),${version}项目版本 POM属性 用户可以使用该属性引用POM文件中对 ...
- HTML --- 盒模型
绝对对位 position:absolute; 当一个元素设定了绝对对位, 如果他的父元素有设置定位(不管是绝对还是相对定位),那么他的坐标就是相当于父元素的左上角 进行定位(即 left:1px;t ...
- jquery dragsort table实现拖拽排序
转自:http://haoningabc.iteye.com/blog/1593640 dragsort官网地址:http://dragsort.codeplex.com/ html代码如下(需引入j ...
- 用Excel完成专业化数据统计、分析工作
使用Excel可以完成很多专业软件才能完成的数据统计.分析工作,比如:直方图.相关系数.协方差.各种概率分布.抽样与动态模拟.总体均值判断,均值推断.线性.非线性回归.多元回归分析.时间序列等.本专题 ...
- FastDFS安装配置手册
文件服务器分布式系统安装手册 本文档详细的介绍了FastDFS的最小集群安装过程.集群环境如下: tracker:20.2.64.133 .用于调度工作,在访问上起负载均衡的作用. group1: s ...
- linux工具问题,tail -f 失效
最近发现一个很奇怪问题: tail -f 不能实时的输出日志
- HTML5 canvas createRadialGradient()放射状/圆形渐变
定义和用法 createLinearGradient() 方法创建放射状/圆形渐变对象. 渐变可用于填充矩形.圆形.线条.文本等等. 提示:请使用该对象作为 strokeStyle 或 fillSty ...
- JSONModel的基本使用
JSONModel 是一个库,它能智能并且快速的创建出数据 model,你可以在你的 iOS 项目或者 OSX 项目上使用它. 使用前准备 添加 JSONModel 到你的工程中 1.需要的环境: A ...
- Swift中可选类型(Optional)的用法 以及? 和 ! 的区别 (转载博客,知识分享)
本文转载自:代码手工艺人的博客,原文名称:Swift之 ? 和 ! Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之 ...
- css media
/* media */ /* 横屏 */ @media screen and (orientation:landscape){ } /* 竖屏 */ @media screen and (orient ...