【bzoj1019】汉诺塔

题意

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1019

分析

思路1:待定系数+解方程

设\(f[n]\)为\(n\)个盘子的答案。

看似这么简单的设数方式!

我们大胆地猜想,它存在线性的递推式!

不难想到先模拟出前几项,然而用待定系数+解方程解出递推式(然而我最初并没有想到...),然后直接递推就OK了。

%%WJMZBMR

思路2:递推

设\(f[x][i]\)表示第\(x\)根柱子上有\(i\)个盘子的最少转移次数,以及转移到的柱子为\(g[x][i]\)

奠基:

\(f[x][1]\)根据优先级来求

\(g[x][1]=1\)

转移:当前已知\(f[?][i-1]\)和\(g[?][i-1]\)的答案,考虑求解\(f[x][i]\)和\(g[x][i]\)

设\(y=g[x][i-1],k=(1+2+3)-(x+y)\),即没有用的哪根柱子。第一步必然是将\(x\)的\(i-1\)个移到\(y\),接下来需要分类讨论。

①当\(g[y][i-1]=k\)时,我们选择这样的策略:

  • 将\(x\)的\(i-1\)个移到\(y\)
  • 将\(x\)的最后一个移到\(k\)
  • 将\(y\)的\(i-1\)个移到\(k\)

得到:

\(f[x][i]=f[x][i-1]+1+f[y][i-1]\)

\(g[x][i]=k\)

②当\(g[y][i-1]=x\)时,我们选择这样的策略:

  • 将\(x\)的\(i-1\)个移到\(y\)
  • 将\(x\)的最后一个移到\(k\)
  • 将\(y\)的\(i-1\)个移到\(x\)
  • 将\(k\)的唯一一个移到\(y\)
  • 将\(x\)的\(i-1\)个移到\(y\)

得到:

\(f[x][i]=f[x][i-1]+1+f[y][i-1]+1+f[x][i-1]\)

\(g[x][i]=y\)

为什么这样是正确的?

其实并不知道......

但好像汉诺塔一类的问题都是这样贪心就可以了。

小结

(1)汉诺塔一类的问题

知结论。

会递推。

会递归。

(2)一类待定系数法解决的问题

对于求\(f(n)\)这类的问题,我们可以大胆地猜想:它是线性的。

然后求解前几项,再解出来,然后就很容易了,最多结合个什么矩阵乘法之类的。

有时候不是线性的也可以解决啊。

例如\(f[i]=af[i-1]^2+bf[i-1]+c\),依然可以使用待定系数求解。

类似的问题:bzoj1002轮状病毒

【bzoj1019】汉诺塔的更多相关文章

  1. BZOJ1019 汉诺塔

    定义f[i][j]为将i柱上的j个盘挪走(按优先级)的步数 p[i][j]为将i柱上的j个盘按优先级最先挪至何处 首先考虑一定p[i][j]!=i 设初始为a柱,p[i][j-1]为b柱 考虑两种情况 ...

  2. BZOJ1019 汉诺塔/洛谷P4285 [SHOI2008]汉诺塔

    汉诺塔(BZOJ) P4285 [SHOI2008]汉诺塔 居然是省选题,还是DP!(我的DP菜得要死,碰见就丢分) 冥思苦想了1h+ \(\to\) ?! 就是普通的hanoi NOI or HNO ...

  3. 【BZOJ1019】[SHOI2008]汉诺塔(数论,搜索)

    [BZOJ1019][SHOI2008]汉诺塔(数论,搜索) 题面 BZOJ 洛谷 题解 首先汉诺塔问题的递推式我们大力猜想一下一定会是形如\(f_i=kf_{i-1}+b\)的形式. 这个鬼玩意不好 ...

  4. bzoj1019 [SHOI2008]汉诺塔

    1019: [SHOI2008]汉诺塔 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1030  Solved: 638[Submit][Status] ...

  5. bzoj1019 / P4285 [SHOI2008]汉诺塔

    P4285 [SHOI2008]汉诺塔 递推 题目给出了优先级,那么走法是唯一的. 我们用$0,1,2$代表$A,B,C$三个柱子 设$g[i][x]$为第$x$根柱子上的$i$个盘子,经过演变后最终 ...

  6. bzoj千题计划109:bzoj1019: [SHOI2008]汉诺塔

    http://www.lydsy.com/JudgeOnline/problem.php?id=1019 题目中问步骤数,没说最少 可以大胆猜测移动方案唯一 (真的是唯一但不会证) 设f[i][j] ...

  7. [bzoj1019][SHOI2008]汉诺塔 (动态规划)

    Description 汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成.一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体. 对汉诺塔的一次合法的操 ...

  8. 【bzoj1019】[SHOI2008]汉诺塔

    1019: [SHOI2008]汉诺塔 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1427  Solved: 872[Submit][Status] ...

  9. bzoj1019: [SHOI2008]汉诺塔(动态规划)

    1019: [SHOI2008]汉诺塔 题目:传送门 简要题意: 和经典的汉诺塔问题区别不大,但是题目规定了一个移动时的优先级: 如果当前要从A柱子移动,但是A到C的优先级比A到B的优先级大的话,那就 ...

随机推荐

  1. php 修改、增加xml结点属性的实现代码

    php修改xml结点属性,增加xml结点属性的代码,有需要的朋友可以参考下 php 修改 增加xml结点属性的代码,供大家学习参考.php修改xml结点属性,增加xml结点属性的代码,有需要的朋友,参 ...

  2. 各操作系统配置java环境变量

    Windows 1. JAVA_HOME -->>  E:\java-tools\Java\JDK8_64\jdk1.8.0_77 2. path -->> %JAVA_HOM ...

  3. SqlSever基础 len函数 计算前后都有空格的字符串的长度时

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  4. Cheatsheet: 2013 08.01 ~ 08.13

    Mobile Objective C Blocks: Summary, Syntax & Best Practices Android SDK: Create an Arithmetic Ga ...

  5. 模块mod_h323的编译

    去h.323plus官网上下载关联的库 http://www.h323plus.org/source/ 很贴心,分操作系统下载,而且关联的ptlib库的版本也一并列了出来. 一.编译ptlib库 ex ...

  6. V-rep学习笔记:转动关节1

    V-REP(Virtual Robot Experimentation Platform),是全球领先的机器人及模拟自动化软件平台.V-REP让使用者可以模拟整个机器人系统或其子系统(如感测器或机械结 ...

  7. virtualenv -- python虚拟沙盒(linux版本)

    有人说:virtualenv.fabric 和 pip 是 pythoneer 的三大神器. 不管认不认同,至少要先认识一下,pip现在倒是经常用到,virtualenv第一次听说,不过,总得尝试一下 ...

  8. Spring整合Hibernate图文步骤

    首先建立java Project工程 点击Finish完成 添加Hibernate和Spring所需要的jar包还有Mysql连接的jar包 创建Dao层,Dao层实现,Model层,Service层 ...

  9. JS——时间日期控件

    原文:http://blog.sina.com.cn/s/blog_621768f30100qmfz.html 今天找到一个还不错的日历控件 下载地址:http://www.my97.net/dp/d ...

  10. Simulating a Fetch robot in Gazebo

    Installation Before installing the simulation environment, make sure your desktop is setup with a st ...