蓝桥杯 PREV-15 格子刷油漆
历年试题 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;
}
更多内容欢迎参观我的个人站
第一个2表示可以选择第i列的两个格子,第二个2表示可以选择i-1列或者i+1列中的两个格子开始最终位置任意的刷漆。 ↩︎
蓝桥杯 PREV-15 格子刷油漆相关推荐
- Java刷漆问题代码_Java实现蓝桥杯历届试题格子刷油漆
问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动 ...
- 蓝桥杯 历届试题 格子刷油漆
问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动 ...
- 蓝桥杯历届试题 格子刷油漆
如果可以,可以陪你千年不老,千年只想眷顾你倾城一笑;如果愿意,愿意陪你永世不离,永世只愿留恋你青丝白衣. #include <iostream> #include <cstdio&g ...
- java蓝桥杯练习 格子刷油漆
java蓝桥杯练习 格子刷油漆 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你 ...
- 【蓝桥杯】历届试题 格子刷油漆(动态规划)
历届试题 格子刷油漆 问题描述 X国的一段古城墙的顶端可以看成 2×N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 例如下图是一个长度为3,高为2的城墙 你可以从任意一个格子刷起,刷完 ...
- 第十四届蓝桥杯三月真题刷题训练——第 15 天
目录 第 1 题:斐波那契与7 问题描述 答案提交 运行限制 代码: 第 2 题:小蓝做实验 问题描述 答案提交 运行限制 代码: 第 1 题:斐波那契与7 问题描述 斐波那契数列的递推公式为: Fn ...
- 蓝桥 历届试题 格子刷油漆
历届试题 格子刷油漆 时间限制:1.0s 内存限制:256.0MB 问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格 ...
- 第十四届蓝桥杯三月真题刷题训练——第 22 天
目录 第 1 题:受伤的皇后_dfs 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 思路: 第 2 题:完全平方数 问题描述 输入格式 输出格式 样例输入 1 样例输出 1 样例输入 ...
- 第十四届蓝桥杯三月真题刷题训练——第 10 天
目录 第 1 题:裁纸刀 问题描述 运行限制 代码: 第 2 题:刷题统计 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 代码: 第 3 题:修建灌木 问题描述 输入 ...
最新文章
- 实现多条件模糊查询SQL语句
- 条理清晰的搭建SSH环境之添加所需jar包
- PP 关于工单领料的总结
- JEESZ-SSO解决方案
- KubeVela安装
- 【vim】Vim: Error detected while processing function SNR37_MRU_LoadList错误
- 尼姑一般怎么自称_电池又一重大事故!选铅酸,还是锂电?听听电池老师傅怎么说!...
- 学习笔记: yield迭代器
- rancher 权限 添加用户_Kubernetes身份认证和授权操作全攻略:访问控制之Service Account...
- 机器学习算法的Python实现 (1):logistics回归 与 线性判别分析(LDA)
- 2018引汉济渭计算机监控系统,基于数字水网的引汉济渭受水区水资源调配业务化研究与应用...
- 大型软件开发中的流程与规范
- Python pandas 染色体 SNP 位点提取 并排序
- 两个相离圆上各取一点P、Q,求线段PQ中点M的轨迹。
- 数学计算机 分数乘法,分数乘法的计算方法
- 解决ImportError: No module named “XXX“
- Markdown取消超链接的下划线
- Adobe 安装程序无法初始化,请下载Adobe Support Advisor检测该问题
- (转)归纳:数据库设计的六个阶段详解(有这一篇就够了)
- Surfer成图--地质图-重力-磁场图-基本操作流程
热门文章
- 云手机的虚拟手机服务器是什么意思,云虚拟手机服务器挂机
- ******战队专访 | 希望大家都能 “hack for fun“
- 3dsMax导出模型到Blender后金属度变成1
- Go语言下载、安装、配置、使用
- 【附源码】Python计算机毕业设计纳雍县梦金园珠宝店管理系统
- ABA问题及解决办法
- 关于FlexCell控件的SelectionMode属性(选择模式)的说明
- Linux execlp函数
- 第18课:Spark Streaming中空RDD处理及流处理程序优雅的停止
- c++中给LPCSTR赋值