问题描述

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

解决思路

现在我们先考虑只在边角的情况。

设 F ( N ) F(N) F(N)
为由作为边界的第N位的某一格作为起点出发,得到的方案数量。
由于上下对称
我们先研究第N位的下角,
这个位置来说只有可能的出现这三种情况

1.有一个进口,有一个出口


可以设这种情况得到的答案为
f 1 ( N ) f_1(N) f1​(N)
很显然,若要上格有返回的线,其 N − 2 N-2 N−2格也必须要有返回的线,由于 N − 2 N-2 N−2也有上格和下格,于是
f 1 ( N ) = f 1 ( N − 1 ) 上 格 + f 1 ( N − 1 ) 下 格 f_1(N)=f_1(N-1)_{上格}+f_1(N-1)_{下格} f1​(N)=f1​(N−1)上格​+f1​(N−1)下格​
由于上格和下格是完全对称的数值。所以
f 1 ( N ) = 2 ∗ f 1 ( N − 1 ) f_1(N)=2*f_1(N-1) f1​(N)=2∗f1​(N−1)

2.只有一个出口


可以设这种情况得到的答案为
f 2 ( N ) f_2(N) f2​(N)
很显然,答案为前一格, F ( N − 1 ) F(N-1) F(N−1)的值
f 2 ( N ) = F ( N − 1 ) 上 格 + F ( N − 1 ) 下 格 f_2(N)=F(N-1)_{上格}+F(N-1)_{下格} f2​(N)=F(N−1)上格​+F(N−1)下格​
由于上格和下格是完全对称的数值。所以
f 2 ( N ) = 2 ∗ F ( N − 1 ) f_2(N)=2*F(N-1) f2​(N)=2∗F(N−1)

3.与前一格关联


很明显,这和情况2所遇到的情形是一样的,不一样的是出现情况2的并不是第 N N N位,而是第 N − 1 N-1 N−1位。于是
可以设情况3
f 3 ( N ) = f 2 ( N − 1 ) 上 格 + f 2 ( N − 1 ) 下 格 f_3(N)=f_2(N-1)_{上格}+f_2(N-1)_{下格} f3​(N)=f2​(N−1)上格​+f2​(N−1)下格​
由于对称
f 3 ( N ) = 2 ∗ f 2 ( N − 1 ) f_3(N)=2*f_2(N-1) f3​(N)=2∗f2​(N−1)
最终
我们可得
F ( N ) = f 1 ( N ) + f 2 ( N ) + f 3 ( N ) F(N)=f_1(N)+f_2(N)+f_3(N) F(N)=f1​(N)+f2​(N)+f3​(N)
{ f 1 ( N ) = 2 ∗ f 1 ( N − 1 ) f 2 ( N ) = 2 ∗ F ( N − 1 ) f 3 ( N ) = 2 ∗ f 2 ( N − 1 ) \begin{cases}f_1(N)=2*f_1(N-1) \\ f_2(N)=2*F(N-1) \\f_3(N)=2*f_2(N-1) \end{cases} ⎩⎪⎨⎪⎧​f1​(N)=2∗f1​(N−1)f2​(N)=2∗F(N−1)f3​(N)=2∗f2​(N−1)​
现在我们来讨论一下边界问题
很显然,由于我们涉及到了 N − 1 N-1 N−1的格,所以我们考察一下 N = 1 N=1 N=1的情况
可以发现
f 1 , f 2 , f 3 f_1,f_2,f_3 f1​,f2​,f3​对于 N = 1 N=1 N=1都是没有定义的。
我们由经验定义
F ( 1 ) = 1 且 { f 1 ( 2 ) = 2 f 2 ( 2 ) = 2 f 3 ( 2 ) = 2 F(1)=1 且\begin{cases}f_1(2)=2 \\ f_2(2)=2 \\f_3(2)=2 \end{cases} F(1)=1且⎩⎪⎨⎪⎧​f1​(2)=2f2​(2)=2f3​(2)=2​

现在我们研究一下起点不在边界的情况下,方案数的情况
我们可以得到这样的一个情况,对于下格来说

设 G ( K ) G(K) G(K)为在第 K K K位的某一格为起点的方案数。
对应图很显然
G ( K ) = f 2 ( N − K + 1 ) ⏞ 左 边 ∗ f 1 ( K ) ⏞ 右 边 + f 1 ( N − K + 1 ) ⏞ 左 边 ∗ f 2 ( K ) ⏞ 右 边 G(K)=\overbrace{f_2(N-K+1)}^{左边}*\overbrace{f_1(K)}^{右边}+\overbrace{f_1(N-K+1)}^{左边}*\overbrace{f_2(K)}^{右边} G(K)=f2​(N−K+1) ​左边​∗f1​(K) ​右边​+f1​(N−K+1) ​左边​∗f2​(K) ​右边​
于是总体解决方案已经明了
设 S ( N ) S(N) S(N)为题目所求
于是 S ( N ) = { 2 ∗ F ( N ) N = 1 4 ∗ F ( N ) N = 2 4 ∗ F ( N ) + 2 ∗ ∑ K = 2 N − 1 G ( K ) N ≥ 3 S(N)=\begin{cases}2*F(N) & N=1 \\ 4*F(N) & N=2\\ 4*F(N)+2*\sum_{K=2}^{N-1}G(K) & N\ge 3\end{cases} S(N)=⎩⎪⎨⎪⎧​2∗F(N)4∗F(N)4∗F(N)+2∗∑K=2N−1​G(K)​N=1N=2N≥3​

【蓝桥杯】格子刷油漆相关推荐

  1. 蓝桥杯 格子刷油漆 动态规划//

    问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动 ...

  2. [蓝桥杯]各自刷油漆Python3满分解法

    [蓝桥杯]各自刷油漆Python3满分解法 文章目录 [蓝桥杯]各自刷油漆Python3满分解法 前言 一.动态规划算法 二.本题思路 1.观察解的特征 2.设计递归方程 3.注意边界特殊情况 三.代 ...

  3. java蓝桥杯练习 格子刷油漆

    java蓝桥杯练习 格子刷油漆 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你 ...

  4. Java刷漆问题代码_Java实现蓝桥杯历届试题格子刷油漆

    问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动 ...

  5. 【蓝桥杯】历届试题 格子刷油漆(动态规划)

    历届试题 格子刷油漆 问题描述 X国的一段古城墙的顶端可以看成 2×N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 例如下图是一个长度为3,高为2的城墙 你可以从任意一个格子刷起,刷完 ...

  6. 蓝桥杯 PREV-15 格子刷油漆

    历年试题 PREV-15 格子刷油漆 题目:传送门 解析: 分析题目我们可以知道刷油漆的的起点可以分为两类,一是在第一列和最后一列的四个格子开始:而是在中间的某个格子开始. 对于从角落开始的方案比较好 ...

  7. 蓝桥 历届试题 格子刷油漆

    历届试题 格子刷油漆 时间限制:1.0s   内存限制:256.0MB 问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格 ...

  8. nyoj 980 格子刷油漆

    格子刷油漆 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 3 描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可 ...

  9. 蓝桥杯三月刷题 第10天

    [蓝桥杯三月刷题 第X天]-- 文章目录

  10. 历届试题 格子刷油漆

    历届试题 格子刷油漆   问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对 ...

最新文章

  1. LightOJ1245-Harmonic Number (II) 【数学调和级数】
  2. 大话风险投资的风险-不只是独角戏(上)
  3. python安装方法32位_Python-3.9.0 安装教程【64位/32位】
  4. ios 苹果审核常见被拒问题
  5. react native 生成APK
  6. Kafka如何实现每秒上百万的超高并发写入?
  7. linux 搜索 空格,如何在Linux中搜索带有空格的模式的文件
  8. python运行时间只算快的吗_10种检测Python程序运行时间、CPU和内存占用的方法
  9. JVM之Tomcat的优化
  10. 在线翻译_英汉互译,支持繁体,韩语,日语 - 微信小程序在线翻译,单词句子翻译
  11. Android 使用数据库操作应用加锁、未加锁,列表展示效果
  12. 独立站的SEO搜索引擎优化
  13. Java 继承思想 及其在 Minecraft mod中相关应用
  14. 神州信息“六合上甲”再获殊荣
  15. Visual C++实现黑白棋游戏项目实战二:界面的设计与实现(附源码和资源 超详细)
  16. 苹果cms模板_苹果CMS建站的一些心得
  17. 193页PPT读懂《数字化转型方法论》,强烈建议收藏!
  18. 如何从零搭建自动化测试框架
  19. java 根据日期算星座_Hive自定义函数实现通过日期计算星座
  20. Java常用技巧和常见错误扫雷

热门文章

  1. Magic Battery for mac(连接设备电量显示)
  2. UEditor +数学公式+ Vue+ Kityformula 富文本编辑器嵌入数学公式的实现
  3. 如何从GitHub获取源代码
  4. php遍历数组与数组指针
  5. Quartz定时任务详解
  6. Ubuntu20.04 -- 小白系列1 之 你可能会遇到
  7. jenkins相关操作
  8. 卡片android手机排行榜,安卓手机流畅度排名,号称18个月不卡的华为无一上榜
  9. python中栈是什么意思_python栈是什么意思,
  10. 平面设计:鲜花导购网页