试题 历届试题 格子刷油漆

问题描述
  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

思路:

固定起点,由于如果起点在中间(第2~N-1列)可以分为左右两边来讨论,这时起点都是角格子。假如a[i]表示2*i的格子从左上角开始刷刷完所有格子的方案数(其中i表示列数,1<=i<=N),有三种刷法刷完所有格子:

  1. 先向下刷(即先刷左下角),向下刷完之后有两种方法跳到下一列,刷完剩下的i-1列需要2*a[i-1]
  1. 向下一列刷,最后刷左下角,可以看出不能同列刷,只能一直向右刷,且在没有到最后一列之前是不能返回,所以刷完所有格子有2^i个方案;(此种情况比较特殊,后面需要还要用到,所以单独用b[i]存储下来)
  1. 向下一列刷,有两种方案到下一列,然后返回左下角,再刷下一列未刷格子之后,然后有两种方案再到下一列,可见有四种方案到下下列,所以刷完所有格子有4*a[i-2]个方案;

总之,就是左下角格子什么时候刷,造成了不同的情况。如果是起点不在角格子上,不难看出,可以将左右两侧分割成 2(i-1) 和 2(N-i) 的矩形,需要其中一个矩形使用第2种刷法刷才能回到另一个矩形中。**

因为有4个角,所以从角出发总共有4 * a[n]种方案。
假如不从角出发,那么肯定不能先把这一列刷完再往两边刷,所以就是先刷一个,再先刷前边(有上下2个选择),最终回到起点下方这个格子,最后再不计终点地刷完后边的格子(开始有上下2个选择);或者先刷后边,最终回到起点下方这个格子,最后再不计终点地刷完前边的格子。再因为开始选择的起点可以有上有下,故t = 2 * (2 * b[i - 1] * 2 * a[n - i]) + 2 * ( 2 * b[n - i] * 2 * a[i - 1])。(2 <=i < n,i即为初始选择的格子所在的列)

代码如下:

#include <stdio.h>
#define mod 1000000007
long long b[1003], a[1003], sum;int main()
{int i, n;scanf("%d", &n);b[1]=1;for(i=2; i<=n; i++)  //初始化b[]数组 {b[i] = b[i-1]*2 % mod;}a[1]=1;              //初始化a[]数组 a[2]=6;for(i=3; i<=n; i++){    //分别对应:先刷同列、先刷下一列再回刷、先刷2列 a[i]=(2*a[i-1] + b[i] + 4*a[i-2]) % mod;}//四个角的情况 sum = 4 * a[n] % mod; //中间的情况 for(i=2; i<n; i++){sum = (sum + 8 * b[i - 1] * a[n - i] % mod + 8 * b[n - i] * a[i - 1] % mod) % mod;}printf("%lld\n", sum);return 0;
}

蓝桥杯 C语言 试题 历届试题 格子刷油漆相关推荐

  1. 题目 1447: 蓝桥杯2013年第四届真题-格子刷油漆

    时间限制: 1Sec 内存限制: 128MB 提交: 943 解决: 249 题目描述 X国的一段古城墙的顶端可以看成  2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任 ...

  2. 蓝桥杯2013年第四届真题-格子刷油漆

    思路: 对于题目给出的几个行走规则,走的方式有很多:但是以某个格子为出发点的方式固定. 将整个矩形刷完,我们的起点主要分为以下两大类: 1.从四个顶点之一出发 2.从中间某个点出发 1.从四个顶点之一 ...

  3. 蓝桥杯c语言校内选拔赛试题,2013年蓝桥杯校内选拔赛C语言B组.docx

    2013年蓝桥杯校内选拔赛C语言B组.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水 ...

  4. 第十届蓝桥杯c语言b组试题,2019年第十届蓝桥杯(决赛)国赛B组C++(B)

    题目: 2019可以被分解成若干个两两不同的素数,请问不同的分解方案有多少种? 注意:分解方案不考虑顺序,如2+2017=2019和2017+2=2019属于同一种方案. 思路先求出2019内的所有素 ...

  5. 【蓝桥杯官网训练 - 历届试题】对局匹配(dp,思维,取模)

    题干: 问题描述 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起.如果 ...

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

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

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

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

  8. 【蓝桥杯VIP】试题 历届试题 带分数(满分 Python解法+Java解法)

    [蓝桥杯VIP]试题 历届试题 带分数(满分 Python解法+Java解法) 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 100 可以表示为带分数的形式:100 = 3 + 6 ...

  9. 蓝桥杯试题 历届试题 李白打酒

    蓝桥杯试题 历届试题 李白打酒 话说大诗人李白,一生好饮.幸好他从不开车. 一天,他提着酒壶,从家里出来,酒壶中有酒2斗.他边走边唱: 无事街上走,提壶去打酒. 逢店加一倍,遇花喝一斗. 这一路上,他 ...

  10. 蓝桥杯---试题 历届试题 填字母游戏(博弈)

    试题 历届试题 填字母游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏 ...

最新文章

  1. 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
  2. JVM调优:JVM内存分代模型
  3. 手动使用cglib代理(了解)
  4. MYSQL的函数有哪些?(4.3时间与日期函数)
  5. HDFS文件导出本地合并为一个文件
  6. 如约而至,Java 10 正式发布:包含 109 项新特性
  7. 如何使用功能性JavaScript编写经典游戏Snake并在浏览器中播放-完整的代码示例教程
  8. IE overflow:hidden失效的解决方法:
  9. python获取select选中的值_python – 使用flask从select标签获取值
  10. 解决python 提示 SyntaxError: Missing parentheses in call to 'print'
  11. Spring : Importxxx系列注解
  12. Django之tag标签和filter标签
  13. 网线连接电脑共享文件传递
  14. Elasticsearc 6.x以后不再支持mapping下多个type
  15. Agilent/安捷伦N6705B直流电源分析仪
  16. HTML <progress>标签
  17. 自建网站对接微信公众号
  18. 中国数字地球行业发展态势与投资前景展望报告(新版)2022-2027年
  19. QList添加自定义结构体
  20. AI人工智能外呼机器人测试项目经历

热门文章

  1. 2010年08期《程序员》配套源码及相关链接
  2. B2B的用户画像怎么做?
  3. 我是游戏设计师——《游戏设计艺术》
  4. SVN客户端和服务端的安装教程
  5. 用springMVC拦截器实现操作日志管理功能
  6. 蓝桥杯试题java_java蓝桥杯试题
  7. 你见过最垃圾的代码长什么样?19 种垃圾代码片段!
  8. 关于PHP自定义采集图片脚本
  9. 在eclipse中运行 carrot2 workbench
  10. 远视图+五环(css练习)