题目链接:https://loj.ac/problem/6398

题目大意:

生命游戏是一个经典的零玩家游戏。

游戏在一块 n \times mn×m 的方格棋盘上进行,初始时,棋盘上的一些格子中有生命,另一些格子中没有生命。

在新的一天开始时,如果一个格子周围的 88 个(边界上的格子也许不到 88 个)格子中,在前一天有恰好22个或33个格子中有生命,则这个格子上的生命可以继续生存,如果周围的格子中有33个格子在前一天有生命且这个格子中前一天没有生命,则会在这个格子中诞生新的生命。在其他情况下,该格子中原有的生命则会死去且不会产生新的生命。

如果在某一天,棋盘上所有的格子里都没有生命,显然,在接下来的时间里,所有的格子中再也不会有生命了,我们就说这些生命灭绝了。

现在,牛牛希望让菲菲来决定游戏开始时棋盘上的每个格子中是否有生命。

而他想知道,在游戏开始时,菲菲有多少种不同的方法使得棋盘上的生命永远也不会灭绝。

解题思路:

看到n和m都比较小, 最多有2^25中情况,但是还要判断是否存活,如此一来时间复杂度会超过1e8,考虑记忆化搜索加状压可以大大减少时间,但是1s内也是跑不完的,打表得答案即可。记忆化搜索大概要跑1分钟。注意记忆化数组vis有三种情况:此情况没有检察、检查了而且可以肯定会死绝、检查了不会死绝。检查过直接return就好。

代码如下:

# include <bits/stdc++.h>using namespace std;const int maxn = 1 << 26;
int vis[maxn];
int n, m, t;
int dir[8][2] = {-1, -1, -1, 1, -1, 0, 1, -1, 1, 0, 1, 1, 0, 1, 0, -1};
/*
bool check(int x, int y){if(x >= 0 && y >= 0 && x < n && y < m)  return true;return false;
}int dfs(int cur){if(vis[cur] != -1) return vis[cur];  //这就是为什么要初始化为-1的缘故vis[cur] = 1;int tmp = 0;for(int i = 0; i < n; ++i)for(int j = 0; j < m; ++j){if(cur & (1 << (i*m+j)) ){int cnt = 0;for(int k = 0; k < 8; ++k){int x = i + dir[k][0];int y = j + dir[k][1];if(check(x, y))cnt += (cur & (1 << (x*m+y)) ) ? 1 : 0;}if(cnt == 2 || cnt == 3)    tmp |= (1 << (i*m+j));} else {int cnt = 0;for(int k = 0; k < 8; ++k){int x = i + dir[k][0];int y = j + dir[k][1];if(check(x, y))cnt += (cur & (1 << (x*m+y)) ) ? 1 : 0;}if(cnt == 3)    tmp |= (1 << (i*m+j));}}if(tmp == 0)    return vis[cur] = 0;else    return vis[cur] = dfs(tmp);   //这里两句必须return,否则绝对出错
}*/int main(){std::ios::sync_with_stdio(false);int res[5][5] = {0,0,0,0,0,0,5,18,73,267,0,18,150,1533,11398,0,73,1533,31828,469972,0,267,11398,469972,12785753};cin >> t;while(t--){cin >> n >> m;cout << res[n-1][m-1] << endl;}/*for(int i = 1; i <= 5; ++i){for(int j = 1; j <= 5; ++j){n = i, m = j;int ans = 0;memset(vis, -1, sizeof(vis));for(int k = 0; k < (1 <<(i*j)); ++k){if(vis[k] == -1)    dfs(k);ans += vis[k];}cout << ans << endl;}}*/return 0;
}

「THUPC2018」生生不息 / Lives(状压 + 记忆化搜索 + 打表)相关推荐

  1. BZOJ5248 [2018多省省队联测]一双木棋(状压+记忆化搜索)

    题目链接:BZOJ 5248 题目描述: 菲菲和牛牛在一块n行m列的棋盘上下棋(n,m<=10),菲菲执黑棋先手,牛牛执白棋后手.棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋 ...

  2. 海贼王之伟大航路——状压记忆化搜索

    海贼王之伟大航路 题意: 一共 n 个点,给定任意两点的距离 dis[i,j]dis[i, j]dis[i,j]. 问,从点 1 到点 n,中途所有节点经过且仅经过一次,距离最短为多少? (2< ...

  3. #6398. 「THUPC2018」生生不息 / Lives

    放一份爆搜代码(能跑过所有数据,5 5 在十分钟左右?): #include<bits/stdc++.h> #define rep(i,x,y) for(register int i = ...

  4. UVA 1220 Party at Hali-Bula (树状DP+记忆化搜索)

    Dear Contestant, I'm going to have a party at my villa at Hali-Bula to celebrate my retirement from ...

  5. 第23次CSP认证 第4题 收集卡牌(记忆化搜索,状压)

    链接:http://118.190.20.162/view.page?gpid=T132 思路:先写一个暴力搜索,然后把中间结点的状态存起来,就是记忆化搜索,状态要存搜索到的层数和选择的卡牌数,0代表 ...

  6. hdu2067 简单dp或者记忆化搜索

    题意: 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  7. 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序

    [题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...

  8. [JSOI2009]密码——AC自动机+记忆化搜索(状压)

    题面 Bzoj1559 解析  要求一个能包含所有字符串的串的个数,联想到AC自动机. 每一个节点需要存一个终点信息,即以这个点为结尾的字符串编号,这个需要开一个vector来存,因为一个节点需要继承 ...

  9. [蓝桥杯][算法提高VIP]Sharing Chocolate(状压dp记忆化搜索)

    题目描述 每天,巧克力在它的许多形式上被全世界数百万人分享.它是一个真正普遍的糖果,实际上在世界上每个国家都能得到. 你发现唯一比吃巧克力更好的事情是把它分享给朋友.不幸的是,你的朋友非常挑剔,有着不 ...

最新文章

  1. 从上云到云管,只差一名青云“最佳小助手”
  2. 不重启iis的情况下切换iis的.net版本
  3. SLF4J: Failed to load class org.slf4j.impl.StaticLoggerBinder
  4. shell printf命令:格式化输出语句
  5. Nutshell中的Java 8语言功能-第1部分
  6. 【转】gcc/g++ 链接库的编译与链接
  7. 案例讲解asp.net中jquery post的用法
  8. Windows 安装 Redis
  9. 360私有云平台Elasticsearch服务初探
  10. android制作图矢量图的工具,矢量图形绘图工具——PaintCode
  11. 【MySQL基础 安装】CentOS 7 Yum网络部署 最新官方MySQL5 2020_2_1
  12. Mac上安装最流畅的Windows XP Lite(免费虚拟机VirtualBox)
  13. Html5 Egret游戏开发 成语大挑战(九)设置界面和声音管理
  14. 传奇手游开服教程:怎么开传奇手游?开传奇手游需要准备什么?
  15. 计算机设置u盘启动,bios设置u盘启动_如何进入bios_bios设置图解教程 - u大师
  16. wdr6500 php,WDR6500成功刷上OpenWrt!!!附上教程。
  17. 微信小程序点击复制文本至剪切板
  18. 读《万历十五年》有感
  19. 图像目标检测算法总结(从 R-CNN 到 YOLO v3)
  20. Content-Type是什么意思?

热门文章

  1. 二分查找算法实现(C语言)
  2. Python 画降雨图,mash 数据掩膜 裁剪出想要的区域,根据shp文件裁剪tif数据
  3. 高防 cdn 可以起到什么作用?
  4. 别把自己当个超人——给初级程序员的一点小小建议
  5. 【好书推荐:第四期】好友的第二本书:《对比Excel,轻松学SQL数据分析》
  6. BASE64Decoder And BASE64Encoder
  7. windows操作系统实验之粘滞键漏洞
  8. Python 中导入模块
  9. Tableau 数据可视化之项目一 教育网站指标评估
  10. 个人练习小览---《优酷仿站》