历年试题 PREV-15 格子刷油漆

题目:传送门
解析
分析题目我们可以知道刷油漆的的起点可以分为两类,一是在第一列和最后一列的四个格子开始;而是在中间的某个格子开始。
对于从角落开始的方案比较好分析,对于从中间开始的,可以将其分解。
例如:城墙为2*5,假设我们从C格开始刷漆,且先向右再向左刷漆。那么可以以B,G和C,H的交界为分割线,右边部分需要从C出发,最后返回与C同列的对应位置H。左边部分则可以从B或G出发,最后的位置任意。先左后右类似。

A B C D E
F G H I J

因此,我们只需要分析从角落开始刷漆,最终位置为开始位置同列的对应格和最终位置任意的情况的方案。

  • 1.从左上角格子A出发,最终返回左下角格子F
      该情形下,每一列初次只能刷一格,这样才能刷满右边步步返回左下角格子F。每一次向下一列移动有两种选择,故若以i代表格子列数,b[i]代表共有i列时从左上角格子出发,回到左下角的方案数,则有递归关系b[i]=2*b[i]。且b[1]=1,b[2]=2。以此关系可以求出n列时的方案数。
  • 2.从左上角格子A出发,最终位置不确定
      最终位置不确定,既可以在同列的对应位置(1中已求),又可以在非同列的位置(待求)。若以i代表格子列数,a[i]代表共有i列时从左上角格子出发,最终停在非同列对应位置的方案数。最终位置与开始位置不同列,又有两种情况:
  • 2.1.A->B/G->F->G/B:向下一列刷,有两种方案到下一列,然后返回左下角,再刷下一列未刷格子之后,然后有两种方案再到下一列,可见有四种方案到下下列,所以刷完所有格子有4*a[i-2]个方案
  • 2.2.A->F->B/G:向下刷,向下刷完之后有两种方法跳到下一列,刷完剩下的i-1列有2*a[i-1]种方案。

因此,可以得到 a[i]=b[i]+2a[i-1]+4a[i-2](i>=3);且a[1]=1,a[2]=6。

所以,对于n列,从角落出发,最终方案共有4*a[n]种;从中间出发,共有 ∑ i = 2 n − 1 ( 2 × b [ n − i + 1 ] × 2 × a [ i − 1 ] + 2 × b [ i ] × 2 × a [ n − i ] ) \sum_{i=2}^{n-1}(2 \times b[n-i+1] \times 2 \times a[i-1] + 2 \times b[i] \times 2 \times a[n-i]) ∑i=2n−1​(2×b[n−i+1]×2×a[i−1]+2×b[i]×2×a[n−i])种。1

解答

#include <iostream>
#include <cmath>
#define MOD 1000000007
using namespace std;typedef long long int LL;
LL a[1005], b[1005];int main()
{ios::sync_with_stdio(false);int n;a[1] = 1; a[2] = 6;b[1] = 1; b[2] = 2;while (cin >> n){int ans = 0;for (int i = 3; i <= n; i++){b[i] = (b[i - 1] * 2) % MOD;a[i] = (b[i] + 2 * a[i - 1] + 4 * a[i - 2]) % MOD;}//从角落开始ans = (ans + 4 * a[n]) % MOD;//从中间开始for (int i = 2; i <= n - 1; i++)ans = (ans + 2 * b[n - i + 1] * 2 * a[i - 1] + 2 * b[i] * 2 * a[n - i]) % MOD;if (n == 1) cout << 1 << endl;else cout << ans << endl;}return 0;
}

更多内容欢迎参观我的个人站


  1. 第一个2表示可以选择第i列的两个格子,第二个2表示可以选择i-1列或者i+1列中的两个格子开始最终位置任意的刷漆。 ↩︎

蓝桥杯 PREV-15 格子刷油漆相关推荐

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

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

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

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

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

    如果可以,可以陪你千年不老,千年只想眷顾你倾城一笑;如果愿意,愿意陪你永世不离,永世只愿留恋你青丝白衣. #include <iostream> #include <cstdio&g ...

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

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

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

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

  6. 第十四届蓝桥杯三月真题刷题训练——第 15 天

    目录 第 1 题:斐波那契与7 问题描述 答案提交 运行限制 代码: 第 2 题:小蓝做实验 问题描述 答案提交 运行限制 代码: 第 1 题:斐波那契与7 问题描述 斐波那契数列的递推公式为: Fn ...

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

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

  8. 第十四届蓝桥杯三月真题刷题训练——第 22 天

    目录 第 1 题:受伤的皇后_dfs 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 思路: 第 2 题:完全平方数 问题描述 输入格式 输出格式 样例输入 1 样例输出 1 样例输入 ...

  9. 第十四届蓝桥杯三月真题刷题训练——第 10 天

    目录 第 1 题:裁纸刀 问题描述 运行限制 代码: 第 2 题:刷题统计 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 代码: 第 3 题:修建灌木 问题描述 输入 ...

最新文章

  1. 实现多条件模糊查询SQL语句
  2. 条理清晰的搭建SSH环境之添加所需jar包
  3. PP 关于工单领料的总结
  4. JEESZ-SSO解决方案
  5. KubeVela安装
  6. 【vim】Vim: Error detected while processing function SNR37_MRU_LoadList错误
  7. 尼姑一般怎么自称_电池又一重大事故!选铅酸,还是锂电?听听电池老师傅怎么说!...
  8. 学习笔记: yield迭代器
  9. rancher 权限 添加用户_Kubernetes身份认证和授权操作全攻略:访问控制之Service Account...
  10. 机器学习算法的Python实现 (1):logistics回归 与 线性判别分析(LDA)
  11. 2018引汉济渭计算机监控系统,基于数字水网的引汉济渭受水区水资源调配业务化研究与应用...
  12. 大型软件开发中的流程与规范
  13. Python pandas 染色体 SNP 位点提取 并排序
  14. 两个相离圆上各取一点P、Q,求线段PQ中点M的轨迹。
  15. 数学计算机 分数乘法,分数乘法的计算方法
  16. 解决ImportError: No module named “XXX“
  17. Markdown取消超链接的下划线
  18. Adobe 安装程序无法初始化,请下载Adobe Support Advisor检测该问题
  19. (转)归纳:数据库设计的六个阶段详解(有这一篇就够了)
  20. Surfer成图--地质图-重力-磁场图-基本操作流程

热门文章

  1. 云手机的虚拟手机服务器是什么意思,云虚拟手机服务器挂机
  2. ******战队专访 | 希望大家都能 “hack for fun“
  3. 3dsMax导出模型到Blender后金属度变成1
  4. Go语言下载、安装、配置、使用
  5. 【附源码】Python计算机毕业设计纳雍县梦金园珠宝店管理系统
  6. ABA问题及解决办法
  7. 关于FlexCell控件的SelectionMode属性(选择模式)的说明
  8. Linux execlp函数
  9. 第18课:Spark Streaming中空RDD处理及流处理程序优雅的停止
  10. c++中给LPCSTR赋值