Codeforces Round #594 (Div. 1) Ivan the Fool and the Probability Theory
题意:给你一个NxM的图,让你求有多少符合 “一个格子最多只有一个同颜色邻居”的图?
题解:首先我们可以分析一维,很容易就可以知道这是一个斐波那契计数
因为dp[1][m]可以是dp[1][m-1]添加一个和结尾不同颜色的块,或者dp[1][m-2]加上两个和结尾不同颜色的块
为什么dp[1][m-1]不可以添加一个和结尾颜色相同的块呢?因为这样情况就和dp[1][m-2]重叠了。
接着我们再分析多维情况
假设我们有一个3x6的图
第一种情况:
第一行中有相邻同色块,例如 100101
那么很明显,第二行只能是 011010,第三行只能是100101,也就是第一行确定了这个图
第二种情况:
第一行中没有相邻同色块,例如101010
那么很明显,第二行可以选择 101010 或者 010101,第三行可以选择101010或者010101
如果我们一直取与上一行完全相反的,那么就是
101010
010101
101010
再结合第一种情况,那么对答案的贡献就是 dp[1][m]。
除此以外,那么如果我们取和上一行完全相同的情况还没有计入,这时我们可以把图旋转一下,变成6x3的图
同理,这样对答案的贡献就是 dp[1][n],但是由于6x3和3x6的完全黑白相间的图
101010 010101 101 010
010101 101010 010 101
101010 010101 101 010
010 101
101 010
010 101
这两种情况其实是相同的,所以最终答案需要-2 ,也就是 ans= dp[1][n]+dp[1][m]-2
//freopen("in.txt", "r", stdin);
#include <bits/stdc++.h>
#include<unordered_set> using namespace std;
typedef double dou;
typedef long long LL;
typedef pair<int, int> pii;
typedef map<int, int> mii; #define pai acos(-1.0)
#define M 200050
#define inf 0x3f3f3f3f
#define mod 1000000007
#define IN inline
#define W(a) while(a)
#define lowbit(a) a&(-a)
#define left k<<1
#define right k<<1|1
#define lson L, mid, left
#define rson mid + 1, R, right
#define ms(a,b) memset(a,b,sizeof(a))
#define Abs(a) (a ^ (a >> 31)) - (a >> 31)
#define random(a,b) (rand()%(b+1-a)+a)
#define false_stdio ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) LL n, m;
LL ans[M]; int main() {
false_stdio;
cin >> n >> m;
ans[] = , ans[] = ;
for (int i = ; i <= max(n, m); i++) {
ans[i] = (ans[i - ] + ans[i - ]) % mod;
}
cout << ((ans[n] + ans[m]) % mod + mod - ) % mod << endl; return ; }
最新文章
- shell-for循环
- webservice发布在外网上的在system.web中加入这个就好使了
- VC++内存区域
- Part 2 How are the URL&#39;s mapped to Controller Action Methods?
- 《深入Java虚拟机学习笔记》- 第14章 浮点运算
- Test oracle db iops
- JS判断Array数组中是否包含指定元素
- Python资源汇总
- gdb常用命令及使用gdb调试多进程多线程程序
- listview下拉刷新上拉加载扩展(二)-仿美团外卖
- os.path官方文档(附翻译)
- [转] Shell编程之数组使用
- Linux umask
- OkHttp踩坑记:为何 response.body().string() 只能调用一次?
- GetMapping 和 PostMapping最大的差别(转)
- 31:字符串p型编码
- windows 下mongodb 副本建创建
- java多线程 基础demo
- 基于canvas的原生JS时钟效果
- Python3: Command not found(Mac OS)