题意:给你一个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 ; }

最新文章

  1. shell-for循环
  2. webservice发布在外网上的在system.web中加入这个就好使了
  3. VC++内存区域
  4. Part 2 How are the URL&#39;s mapped to Controller Action Methods?
  5. 《深入Java虚拟机学习笔记》- 第14章 浮点运算
  6. Test oracle db iops
  7. JS判断Array数组中是否包含指定元素
  8. Python资源汇总
  9. gdb常用命令及使用gdb调试多进程多线程程序
  10. listview下拉刷新上拉加载扩展(二)-仿美团外卖
  11. os.path官方文档(附翻译)
  12. [转] Shell编程之数组使用
  13. Linux umask
  14. OkHttp踩坑记:为何 response.body().string() 只能调用一次?
  15. GetMapping 和 PostMapping最大的差别(转)
  16. 31:字符串p型编码
  17. windows 下mongodb 副本建创建
  18. java多线程 基础demo
  19. 基于canvas的原生JS时钟效果
  20. Python3: Command not found(Mac OS)

热门文章

  1. html的适配
  2. JDK8中的HashMap实现原理及源码分析
  3. Java 将数据写入磁盘并读取磁盘上的文件
  4. 吴裕雄--天生自然java开发常用类库学习笔记:国际化程序
  5. 51nod 1206:Picture 求覆盖周长
  6. 51nod 1352:集合计数
  7. Django——HttpResponse()
  8. React 学习笔记(2) 路由和UI组件使用
  9. NumPy 数组切片
  10. spring源码 AutowireCapableBeanFactory接口