问题

参考博客
参考博客
X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆。
一天算法题(2019-12-14)
你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!)
比如:a d b c e f 就是合格的刷漆顺序。
c e f d a b 是另一种合适的方案。
当已知 N 时,求总的方案数。当N较大时,结果会迅速增大,请把结果对 1000000007 (十亿零七) 取模。

动态规划:

我们分为两种(假如a[i]表示2*i的格子从刷完所有格子的方案数(其中i表示列数,1<=i<=N))

  1. 从边角出发
  • 从任意一个角出发(假设先从左上角出发,把结果*4就能得到四个角情况了)
  • 第一种情况先把第一列刷完,再刷第二列,这样第一列到第二列有两个选择(要么对角,要么不是对角),记c[i]为从i-1跑到i列的情况数,那么c[i] = a[i-1]*2,然后剩下的格子又是一个全新的子问题
    一天算法题(2019-12-14)
  • 第二种情况,不先刷左下角,那么第二次就会刷第二列,这里又分成两种情况:
    第1,任意刷第二列的一个,然后回到第一列刷完,再回到第二列,然后下一列
    一天算法题(2019-12-14)
    从上面可以看出,去到第三列可以有四种方法,记这种走到i列的为e[i],则e[i] = 4*a[i-2],然后剩下又是一个全新的子问题
    第2,刷第二列的任意一个,然后不回到第一列,继续刷第三列的任意一个,这样只能不断往下走,不到尽头,不能返回
    一天算法题(2019-12-14)
    可以看出,每一次走往下一列,都有两种选择,记走到第i列为d[i],则d[i] = 2^i,d[i] = d[i-1]*2

那么四个角的所有情况为 4*(a[i] = 2 * a[i - 1] + 4 * a[i - 2] + b[i] )

  1. 从中间出发
    起点在i那么两种情况
  • 向左运动后回到第i列然后向右运动
  • 向右运动后回到第i列然后向左运动
    一天算法题(2019-12-14)
    代码:(待补)

相关文章:

  • 2021-11-06
  • 2021-07-24
  • 2022-12-23
  • 2021-06-25
  • 2021-07-03
  • 2021-07-16
  • 2021-10-03
  • 2021-06-14
猜你喜欢
  • 2022-01-23
  • 2022-03-07
  • 2021-09-15
  • 2022-01-06
  • 2021-11-04
  • 2021-12-15
  • 2021-11-07
相关资源
相似解决方案