汉诺塔问题推广【排列组合】

已知的汉诺塔问题是这样的:

有三根木棒,第一根木棒上有若干根环,现在要把第一根木棒上的环移动到第三根上去,移动的规则是大的环不能在小的环上面。

现在将其改变一下:

木棒的移动过程中每次只能在相邻的木棒间移动。

问有多少种方法。

其实类似于这样的问题我们可以这样来考虑:

总和F(n

第一步:将第一个棒上的(n-1)个环移动到第三个棒上。--->F(n-1)

第二步:将第一个棒上的最大的那个环移动到第二个棒上。--->1

第三步:将第三个棒上的(n-1)个环移动到第一个棒上。  --->F(n-1)

第四步:将第二个棒上的那个最大的环移动到第三个帮上。--->1

第五步:将第一个棒上的(n-1)个环移动到第三个棒上。  --->F(n-1)

F(n)=3*F(n-1)+2;       F(1)=2; 

故F(n)=3^n-1;


现在来个一个n层高的汉诺塔涂颜色,有蓝,红,黄三种颜色,每两层不能是连续的蓝色。

问一共有多少种方法。

dp[n][0]表示第n层涂蓝色有多少种方法。

dp[n][1]表示第n层不涂蓝色有多少种方法。

若第n-1层是蓝色,则第n层一定不能是蓝色。 dp[n][0] = dp[n-1][1]

若第n-1层不是蓝色(红色或者黄色),则第n层可以是任何颜色。dp[n][1] = 2 * ( dp[n-1][1] + dp[n-1][0] )

dp[1][1]=2, dp[1][0]=1;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值