题意:给n*m的网格涂黑白两种颜色,保证每个格子上下左右的四个格子中最多只有一个格子与自己颜色相同,问有多少种涂法?结果$mod1000000007$

思路:先只考虑一行有多少种涂法

  • $dp[i][0]$表示第$i$个格子与第$i-1$个格子颜色不一样,那么第$i-1$与第$i-2$个格子颜色可以不同也可以相同,所以$dp[i][0]=dp[i-1][1]+dp[i-1][0]$
  • $dp[i][1]$表示第$i$个格子与第$i-1$个格子颜色相同,那么第$i-1$与第$i-2$格子颜色只能不相同,所以$dp[i][1]=dp[i-1][0]$

再考虑其他行的情况:

  • 第一行有两个连续格子颜色相同时的情况(即 黑黑白黑白...这种情况),这时第二行必须跟第一行完全相反才能符合题意。

证明如下:以 黑黑白黑白 为例,如果 黑黑 的下一行出现了 黑,显然不符合题意,所以 黑黑 的下一行只能为 白白,其次如果第三个 白 的下一行为 白,就和前面的两个 白 组成了连续的三个 白,不符合题意,所以此时下一行必须与上一行完全相反。

  • 第一行没有两个连续格子颜色相同时的情况(即 黑白黑白黑白...这种情况),设$f(i)$表示加入第$i$行时有多少种情况,如果第$i-1$和第$i-2$行颜色相同,那么第$i$行与第$i-1$行颜色不能相同,如果第$i-1$和第$i-2$行颜色不同,那么第$i$行和第$i-1$行颜色可以相同也可以不同,先假设第$i$行与第$i-1$行颜色不同,那么有$f(i-1)$种,只有当第$i-1$行与第$i-2$行颜色不同时第$i$行与第$i-1$行颜色才能相同,有$f(i-2)$种,所以$f(i)=f(i-1)+f(i-2)$,满足斐波那契数列。

第一种情况有$dp[m][0]+dp[m][1]-2$种(除去 黑白黑白黑白... 白黑白黑白黑... 这两种情况),第二种情况只有两种,所以最后的方案数为$dp[m][0]+dp[m][1]-2+2*f(n)$

其实行和列都是斐波那契数列,比赛时没看出来,答案为$2*(f(n)+f(m))-2$

#include <iostream>
#include <cstdio>
#include <algorithm> using namespace std; typedef long long ll; const int N = ;
const ll mod = int(1e9) + ; ll dp[N][], n, m;
ll f[N]; int main()
{
scanf("%lld%lld", &n, &m);
dp[][] = , dp[][] = ;
for (int i = ; i <= m; i++) {
dp[i][] = (dp[i - ][] + dp[i - ][]) % mod;
dp[i][] = dp[i - ][] % mod;
}
f[] = , f[] = ;
for (int i = ; i <= n; i++) f[i] = (f[i - ] + f[i - ]) % mod;
ll res = (dp[m][] + dp[m][]) % mod;
ll ans = ((f[n] * ) % mod + (res - ) % mod) % mod;
printf("%lld\n", ans);
return ;
}

Codeforces Round #594 (Div. 2) - C. Ivan the Fool and the Probability Theory(思维)的更多相关文章

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

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

  2. 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 ...

  3. Codeforces Round #594 (Div. 2)

    传送门 C. Ivan the Fool and the Probability Theory 题意: 给出一个\(n*m\)的方格,现在要给方格中的元素黑白染色,要求任一颜色最多有一个颜色相同的格子 ...

  4. Codeforces Round #594 (Div. 1)

    Preface 这场CF真是细节多的爆炸,B,C,F都是大细节题,每道题都写了好久的说 CSP前的打的最后一场比赛了吧,瞬间凉意满满 希望CSP可以狗住冬令营啊(再狗不住真没了) A. Ivan th ...

  5. Codeforces Round #539 (Div. 2) - C. Sasha and a Bit of Relax(思维题)

    Problem   Codeforces Round #539 (Div. 2) - C. Sasha and a Bit of Relax Time Limit: 2000 mSec Problem ...

  6. Codeforces Round #716 (Div. 2), problem: (B) AND 0, Sum Big位运算思维

    & -- 位运算之一,有0则0 原题链接 Problem - 1514B - Codeforces 题目 Example input 2 2 2 100000 20 output 4 2267 ...

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

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

  8. Codeforces Round #594 (Div. 1) D. Catowice City 图论

    D. Catowice City In the Catowice city next weekend the cat contest will be held. However, the jury m ...

  9. Codeforces Round #594 (Div. 1) C. Queue in the Train 模拟

    C. Queue in the Train There are

随机推荐

  1. Java环境配置与编译运行详解

    这篇文章主要为大家详细介绍了Java环境配置与编译运行的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.开篇 通过对之前Java之路的了解之后,相信初学者们都对Java有了一个比较深印 ...

  2. Intellij Idea2019版本激活,目前可以激活到2089,解决失效问题(非商业用途)

    目录 Intellij Idea2019版本激活,目测可以激活到2089!! 前言-此教程仅用作个人学习,请勿用于商业获利,造成后果自负!!! 步骤(直接激活新下载的) 成功 注意(不想重新下载的小伙 ...

  3. putty上传下载文件

    一,需要pscp.exe,习惯上和Putty.exe文件放在一起. 首先需要保证在命令行下可以访问到pscp.exe.可以通过配置Windows的环境变量Path,或者直接通过命令行访问到pscp.e ...

  4. Django框架之ORM的相关操作之分页(六)

    分页是每个项目必不可少要写的一个功能,该篇文章就将记录一下使用ORM写分页的过程. 假设我们的数据库里面需要显示一些数据,而这个表中的数据大约有几千条数据,那么我们不可能将所有的数据都显示出来,那么就 ...

  5. git拉取代码

    1,用sourcetree拉取的时候 遇到  fatal: repository 'http://gitlab.xxx.com/XXX/XXX.git/' not found 2,可以直接在要存放代码 ...

  6. Python实现重命名一个文件夹下的图片

    在网上查了一下python实现的图片重命名,工作中刚好用一下. # -*- coding:utf8 -*- import os path = '新建文件夹 (2)/' filelist = os.li ...

  7. codeforces Beautiful Numbers

    来源:http://codeforces.com/problemset/problem/1265/B   B. Beautiful Numbers   You are given a permutat ...

  8. php集成环境、基础标记符

    集成环境:wamp windows apache mysql php lamp linux apache mysql php 标记符: 1.<?php ...... ?> 2.<?p ...

  9. Typora自动生成标题编号

    1.要实现的效果 按照markdown语法输入  # 一级标题后,自动生成前面的编号 2.配置方法 2.1.进入目录 2.2.创建文件 2.3.编辑文件 base.user.css /** initi ...

  10. VS中编码格式的问题(待总结)

    今天又遇到这样的事情了,VS中代码明明是正确的,却报某个变量未定义.百思不得解,前面增加了一个换行之后,竟然又神奇般的复原了. 最后确认是编码格式的问题,后来把有问题的那部分代码粘贴到微软的" ...