题目传送门

题目大意:

一个$n*m$的网格图,每个格子可以染黑色、白色,问每个格子最多有一个相邻格子颜色相同的涂色方案数
$n,m<=1e5$

分析:

首先,考虑到如果有两个相邻的格子颜色相同,那么这两行/列的格子状态就确定了。比如:

在中间两个爱心格子被确定的情况下,第二列和第三列的涂色情况就已经被确定了。实际上,第一列和第四列涂的颜色也确定了。(最后这句话我们留着待会儿分析)

同理,在中间两个星星确定的时候,第二行和第三行的涂色情况也唯一确定。实际上,第一行和第四列涂的颜色也确定了。


假如说在一个方格中,既有横着出现的两个连续的一样颜色的格子,也有竖着出现的两个连续的一样颜色的格子,就像这样:

那么一定会产生矛盾,无论怎么挪都会产生矛盾。(橙色的部分是既需要用灰色,也需要用蓝色涂的格子,是矛盾的地方)

所以,在一种着色方案中,这种相邻两个颜色一样的情况只会在一个方向中出现,我们只需要考虑一个方向那么多行的方案数,另外一个方向的同理就好。


如果已经确定相邻两个颜色一样的格子出现的方向(为方便讨论,下面我们假设这两个格子是竖着的),那么每一行的格子颜色一定是交错的,两行之间要么一样,要么颜色相反,而且颜色一样的不能连着出现3次及以上。

在第一行确定的情况下,如果要求每一个格子的每个相邻格子的颜色都和他不一样,那么这是一个棋盘染色,就唯一确定了。

但是,按照这道题的条件来说的话,后面的格子可以有两行,也可以只有一行。(就是一次性确定两行或一次性确定一行)

Like this:

设$f[i]$表示铺到第$i$行(前$i$行)的方案总数,那么递推式就是$f[i]=f[i-1]+f[i-2]$

(初始化$f[0]=1$是一开始就是两行连着一样的情况)

答案就是$f[n]$。

然后,还有相邻两个颜色一样的格子是竖着的,方案数就是$f[m]$,这两类在前面已经说过没有交集,答案就是$f[n]+f[m]$

然后,棋盘染色的情况在两种情况中都被计算了,所以答案要减1。

最后,黑白颜色可以反过来,所以乘2.

做完了,$Nice!$

 /*
ID: Starry21
*/
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;
#define N 100005
#define ll long long
#define MOD 1000000007
int n,m;
ll f[N];
int main()
{
scanf("%d %d",&n,&m);
f[]=f[]=;
for(int i=;i<=max(n,m);i++)
f[i]=(f[i-]+f[i-])%MOD;
printf("%lld\n",*((f[n]+f[m])%MOD-+MOD)%MOD);
return ;
}

代码贼短

CF C.Ivan the Fool and the Probability Theory【思维·构造】的更多相关文章

  1. Codeforces Round #594 (Div. 2) - C. Ivan the Fool and the Probability Theory(思维)

    题意:给n*m的网格涂黑白两种颜色,保证每个格子上下左右的四个格子中最多只有一个格子与自己颜色相同,问有多少种涂法?结果$mod1000000007$ 思路:先只考虑一行有多少种涂法 $dp[i][0 ...

  2. Codeforces Round #594 (Div. 2) C. Ivan the Fool and the Probability Theory (思维,递推)

    题意:给你一个\(n\)x\(m\)的矩阵,需要在这些矩阵中涂色,每个格子可以涂成黑色或者白色,一个格子四周最多只能有\(2\)个和它颜色相同的,问最多有多少种涂色方案. 题解:首先我们考虑一维的情况 ...

  3. Codeforces Round #594 (Div. 1) A. Ivan the Fool and the Probability Theory 动态规划

    A. Ivan the Fool and the Probability Theory Recently Ivan the Fool decided to become smarter and stu ...

  4. CF1239A Ivan the Fool and the Probability Theory

    思路: 可以转化为“strip”(http://tech-queries.blogspot.com/2011/07/fit-12-dominos-in-2n-strip.html)问题.参考了http ...

  5. Codeforces 1239A. Ivan the Fool and the Probability Theory

    传送门 注意到连续两个格子如果有相同颜色那么一路过去的都可以确定 比如一开始染了这两个位置: 然后发现后面整片过去都可以确定: 对于横着的情况也是一样,然后就会发现不可能出现横着两个和竖着两个同时都有 ...

  6. Codeforces 1248C Ivan the Fool and the Probability Theory(推公式)

    题意 一个n*m的网格图,每个格子可以染黑色.白色,问你每个格子最多有一个相邻颜色相同的方案数 n,m<=1e5 思路 我们先处理\(1 \times m\)的情况 设\(f[i][j]\)为前 ...

  7. Codeforces Round #594 (Div. 1) Ivan the Fool and the Probability Theory

    题意:给你一个NxM的图,让你求有多少符合 “一个格子最多只有一个同颜色邻居”的图? 题解:首先我们可以分析一维,很容易就可以知道这是一个斐波那契计数 因为dp[1][m]可以是dp[1][m-1]添 ...

  8. C - Ivan the Fool and the Probability Theory---div2

    题目连接:https://codeforces.com/contest/1248/problem/C 思路: 注意上下两排的关系,如果说上面那一排有两个方格连续,那么他相邻的两排必定和他相反,如果说当 ...

  9. 一起啃PRML - 1.2 Probability Theory 概率论

    一起啃PRML - 1.2 Probability Theory @copyright 转载请注明出处 http://www.cnblogs.com/chxer/ A key concept in t ...

随机推荐

  1. 31、[源码]-AOP原理-AnnotationAwareAspectJAutoProxyCreato机

    31.[源码]-AOP原理-AnnotationAwareAspectJAutoProxyCreato机

  2. promise 及 setTimeout 执行顺序

    setTimeout(function() { console.log(1); }, 0); new Promise(function(res, rej) { res(2); console.log( ...

  3. qml 3d 纪念那些曾经爬过的坑

    1.使用多position画图时,图形不受控制的问题? 在变量属性设置时Attribute中的attributeBaseType 数据类型一定要和 Buffer中data 数据类型一定要相同. 例如  ...

  4. E【中】假的字符串(trie+拓扑排序)

    题目 E[中]假的字符串 做法 一个字符串能作为最小值最基础的条件为不能出现前缀字符串 我们需要确定一种每个字符的排名使得\(s\)作为最小值,另有很多字符串\(t\),与\(s\)第一个不相同的位置 ...

  5. xiugai grub

    https://wiki.gentoo.org/wiki/Flicker_Free_Boot#Getting_the_custom_version_of_grub

  6. CSAW Quals CTF 2017-scv

    目录 程序基本信息 程序漏洞 整体思路 exp脚本 内容参考 程序基本信息 64位动态链接程序,开启了栈溢出和数据段不可执行保护 程序漏洞 read函数很明显的栈溢出漏洞 整体思路 由于题目给了lib ...

  7. 2018-2019-2 《网络对抗技术》Exp9 Web安全基础 20165114

    Exp9 Web安全基础 目录 一.实验内容 二.基础问题回答 (1)SQL注入攻击原理,如何防御 (2)XSS攻击的原理,如何防御 (3)CSRF攻击原理,如何防御 三.实践过程记录 3.1 注入缺 ...

  8. django + vue3 解决跨越问题

    django跨域 解决: https://yq.aliyun.com/articles/517215 vue3 跨越(此处没必要,django处理即可): https://blog.csdn.net/ ...

  9. Lasso回归的坐标下降法推导

    目标函数 Lasso相当于带有L1正则化项的线性回归.先看下目标函数:RSS(w)+λ∥w∥1=∑Ni=0(yi−∑Dj=0wjhj(xi))2+λ∑Dj=0∣wj∣RSS(w)+λ∥w∥1=∑i=0 ...

  10. 测试开发中Django和Flask框架

    Python测试开发中Django和Flask框架 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应用.系统应用)跟建造房子的过程一样,需要先打地基,搭好骨架,然后 ...