蓝桥,格子涂油漆

  题目链接:格子涂油漆

  题目描述:

  X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆。


  你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!)
  比如:a d b c e f 就是合格的刷漆顺序。
  c e f d a b 是另一种合适的方案。
  当已知 N 时,求总的方案数。当N较大时,结果会迅速增大,请把结果对 1000000007 (十亿零七) 取模。

输入格式
  输入数据为一个正整数(不大于1000)
输出格式
  输出数据为一个正整数。
样例输入
2
样例输出
24
样例输入
3
样例输出
96
样例输入
22
样例输出
359635897
  可以看出来这是一类dp题,然而递推式一直无从下手,感觉状态多样,看了网上的题解才有了思路。首先四个顶点肯定是对称的,并且以它们为起点,对终点没有要求。那么在中间呢,就像下图的3为起点的话,那么第一步肯定不能走向7,不然就从中间截断了无法涂完所有格子。我们让它一开始是往左边走,那么如果它是走到2,那么左边的的涂完的终点就应该是6,反之就是先走到6,最后左边涂完的终点是2。

   然后就是2或者6走到7,这时就相当于左边已经涂完了,7可以走向4或者8,这时对于右边的终点就没有要求了只要是合理的涂法就行。

  从3走到2或6涂左边的,从7走到4或8涂右边,它们的方案可以总结为两种,一种是以顶点为起点,终点在同一列的方案,另一种就是以顶点为起点,终点任意的方案,所以我们用数组a代表第一种方案,数组b代表第二种方案,那么a[i]就是以一个顶点为起点涂完2*i个格子,终点在起点的同一列的方案,b[i]就是以一个顶点为起点涂完2*i个格子,终点任意的方案。那么从第二列开始到第n-1列中间的列为起点的方案就是

 先走左边的方案Li=2*a[i-1]*2*b[n-i]

 先走右边的方案Ri=2*b[i-1]*2*a[n-i]

 方案就是Ci=(Li+Ri)*2

(就比如上图的第3列为起点,左边就剩下i-1列,右边剩下n-i列,从3开始,先走左边的话,3可以走到2和6,所以左边涂完就是2*a[i-1],然后7可以走到4和8所以右边涂完就是2*b[n-i],左右方案相乘就是这种情况的方案。然后从3开始,也可以先走右边,还有就是也可以从7开始,所以这一列为起点的方案就是(Li+Ri)*2),

那么中间所以列的方案就是C2+C3+...+Cn-1

  那么怎么处理出a数组和b数组呢?上课去,先弃坑。

猜你喜欢

转载自www.cnblogs.com/LMCC1108/p/10676245.html