历届试题 格子刷油漆  
问题描述
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
思路:毕竟是决赛题,难度是很大的(对我来说),看了这位博主的思路,才发现规律真的很奇妙,导航门https://www.jianshu.com/p/214d09476203

1构造数组a[x]、b[x]。a[x]表示在2 * x的格子条件下,从四个角任意一个角的格子出发,遍历全体格子的方法总数,b[x]表示在2 * x的条件下,从四个角任意一个角的格子出发,遍历全体格子后回到与之相对的格子中的方法总数。
显然,a[1]=1,b[1]=1。

递推式:
a[x]=
b[x]=b[x-1] * 2
推导如下:

  1. 先考虑出发点在角上,从一个角出发,只有3种可能性。
    (1)先去同一列相邻的格子,然后前往下一列,这就简化成从2 * (x-1)的格子中,从一个角出发,遍历全体格子的 问题。因为前往下一列有两种选法,所以有2 * a[x-1]种方法。
    (2)先去相邻列的同一行的格子。又分为:
    先去左下角,再去右边部分, a[x-2] * 2种方法
    先遍历右边的所有,再回来左下角,b[x-1]种方法
    (3)先去右下角的格子,又分为:
    先去左边格子,再遍历右边,a[x-2] * 2种方法
    先遍历右边,再去左边,b[x-1]种方法

整理可得
a[x]=a[x-1] * 2+a[x-2] * 4+b[x-1] * 2
b[x]=2 * b[x-1]
而从中间某列的一点(2种选择)出发时,显然 不能直接往下走,否则无法遍历所有的点,应当先遍历左边(右边)左右的点,然后回到相对的点,再遍历右边(左边)的点。假设从第i列出发,出发的点有两种选择,第二步也有两种选择,因此所有的走法有2 * (b[i-1] * 2 * 2 * a[n-i]+ 2 * b[n-i] * 2 * a[i-1])种。加法的前一半时先遍历左边,后一半是先遍历右边。

于是,总数就是4 * a[x]+Σ(2到n-1)2 * (b[i-1] * 2 * 2 * a[n-i]+ 2 * b[n-i] * 2 * a[i-1])

代码方面注意对取余的处理就行了

 1 #include<bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 int main()
 6 {
 7     int x;
 8     cin >> x;
 9     long  long int a[x+1];
10     long long int b[x+1];
11     a[1]=1;
12     b[1]=1;
13     a[2]=6;
14     long long int def=1000000007;
15     for(int i=2;i<=x;i++){
16         b[i]=(b[i-1]*2);
17         b[i]%=def;
18     }
19     for(int i=3;i<=x;i++){
20         a[i]=(a[i-1]*2+a[i-2]*4+b[i-1]*2);
21         a[i]%=def;
22     }
23     long long int sum=0;
24     sum=4*a[x];
25     for(int i=2;i<=x-1;i++){
26         sum+=2*(b[i-1]*2*2*a[x-i]%def+2*b[x-i]*2*a[i-1]%def);
27         sum%=def;
28     }
29 if(x==1) sum=2;
30     cout <<sum;
31     return 0;
32 }

转载于:https://www.cnblogs.com/henuliulei/p/10494755.html

历届试题 格子刷油漆相关推荐

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

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

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

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

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

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

  4. 动态规划 之 历届试题 格子刷油漆

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

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

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

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

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

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

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

  8. nyoj 980 格子刷油漆

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

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

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

最新文章

  1. 在Asp.Net MVC中设定site路径所对应的默认action
  2. linux c++ 服务器端开发面试必看书籍
  3. Swift使用iconfont图标
  4. 支付接入开发的陷阱有多深?
  5. Spring Boot系列四 Spring @Value 属性注入使用总结一
  6. 人耳识别代码_语音识别之——音频特征fbank与mfcc,代码实现与分析
  7. android模拟器EditText 不能用物理键盘输入,也不能用电脑键盘输入
  8. java annotation应用_java Annotation的应用
  9. idea打war包时,JDK版本的问题解决方式
  10. zabbix入门之监控MySQL
  11. Ant Design Vue页面数据复制
  12. 【UI/UX】桌面GUI设计
  13. jquery表格自动补全插件——datagrid
  14. 微信扫码登录实现原理
  15. Python 标准库—— datetime(运行时间的判断)
  16. Python如何出矢量图
  17. 计算机时代前的发明,假如1万人回到150万年前,只带简单工具,多久才能制造出计算机?...
  18. video全局事件属性
  19. 【C++自学笔记 提高编程篇(二)STL初识】
  20. Oracle表空间删除报错问题的解决

热门文章

  1. 支付宝批量转账系统解析
  2. ps制作台式计算机图标,Photoshop:利用PATH(路径)制作图标
  3. word中表格文字不自动换行的方式
  4. 获得周公解梦数据接口java_基于JAVA的免费周公解梦接口调用代码实例
  5. 在360浏览器怎么找html,360浏览器,小编教你怎么找360浏览器收藏夹路径
  6. 【有利可图网】PS教程:让天空变蓝让阳光变通透
  7. MySQL MID()函数用法
  8. 联想g400从u盘启动计算机,联想g400s怎么重装系统 联想g400s重装系统方法【图文步骤】...
  9. 清华IT大牛带领一群年青程序员叫板美国,被誉为中国第一程序员
  10. docker卸载脚本