蓝桥杯试题格子刷油漆,求思路

标题:格子刷油漆图片说明

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

你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!)

比如:a d b c e f 就是合格的刷漆顺序。

c e f d a b 是另一种合适的方案。

当已知 N 时,求总的方案数。当N较大时,结果会迅速增大,请把结果对 1000000007 (十亿零七) 取模。

输入数据为一个正整数(不大于1000)

输出数据为一个整数。

例如:
用户输入:
2
程序应该输出:
24

再例如:
用户输入:
3
程序应该输出:
96

再例如:
用户输入:
22
程序应该输出:
359635897

资源约定:
峰值内存消耗(含虚拟机) < 64M
CPU消耗 < 2000ms

这个问题要反过来想不合理的情况。其实很简单,只需要排除一种情况,就是有一列的两个都被刷了,而前面还有未刷的,这样就回不来了。比如例子中,如果c,d都被刷了,而a,b有一个或者两个都未刷,这时候如果已经移动到了e,f列中,就无法返回a,b了,就完成不了了。也就是说,如果前面有未刷的,那么就不能允许有一列的两格都被刷。

http://blog.csdn.net/u012629369/article/details/21172165

这个问题要反过来想不合理的情况。其实很简单,只需要排除一种情况,就是有一列的两个都被刷了,而前面还有未刷的,这样就回不来了。比如例子中,如果c,d都被刷了,而a,b有一个或者两个都未刷,这时候如果已经移动到了e,f列中,就无法返回a,b了,就完成不了了。也就是说,如果前面有未刷的,那么就不能允许有一列的两格都被刷。