[GDKOI2016] Day2 染色大战 记忆化搜索
来源:互联网 发布:淘宝账号不能手机登陆 编辑:程序博客网 时间:2024/04/27 16:12
出题人讲这题的时候扯到了模拟退火,遗传算法,alphabeta剪枝等等
然而这题一个记忆化搜索就能跑过去
#include <iostream>#include <cstdio>#define INF (1<<30)#define N 22using namespace std;int n,m,tp,e[N][N],map[N][N],v[N][N];int vis[2][1<<N];const int fx[] = {0,1,0,-1};const int fy[] = {1,0,-1,0};inline void ut(int &x,int y) { x = max(x,y); }inline void check(int x,int y,int &c) { if (map[x][y] && map[x+1][y] && map[x][y+1] && map[x+1][y+1]) c+=v[x][y];}int dfs(int x,int mask){ if (mask == tp) return 0; if (vis[x][mask]) return vis[x][mask]; int ret = -INF; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) if (!map[i][j]){ map[i][j] = 1; int val = 0; check(i-1,j-1,val); check(i-1,j,val); check(i,j-1,val); check(i,j,val); if (val) val += dfs(x,mask+e[i][j]); else val -= dfs(x^1,mask+e[i][j]); ut(ret,val); map[i][j] = 0; } vis[x][mask] = ret; return ret;}int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) e[i][j] = 1<<( (i-1)*m+j-1 ); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { scanf("%d",&map[i][j]); if (!map[i][j]) tp += e[i][j]; } for (int i=1;i<=n-1;i++) for (int j=1;j<=m-1;j++) scanf("%d",&v[i][j]); //1先手 0后手 int ans = dfs(1,0); printf("%d\n",ans); return 0;}
0 0
- [GDKOI2016] Day2 染色大战 记忆化搜索
- GDKOI2016 Day2 T1 染色大战
- [GDKOI2016]染色大战
- 【GDKOI2016】D2T1染色大战
- 【GDKOI2016】染色大战 Code&Details
- GDKOI 2016 Day2【T1】【染色大战】
- 银河之星(记忆化搜索+9点染色)
- GDKOI2016 Day2 T3 项链
- [GDKOI2016] Day2 项链 ?
- GDKOI2016 Day2 T4 小学生数学题
- GDKOI2016 Day2 T2 QT与泰剧
- 记忆化搜索例题
- PKU1088---记忆化搜索
- PKU1088 记忆化搜索
- HDU1078 记忆化搜索
- HDU1501 记忆化搜索
- HDU1978 记忆化搜索
- poj1661 记忆化搜索
- python学习之字符串前面加 r 的作用
- Mybatis的Dao向mapper传多个参数(三种解决方案)
- 2016拜拜,2017我来
- The JSP specification requires that an attribute name is preceded by whitespace
- 辅助功能之自动抢红包
- [GDKOI2016] Day2 染色大战 记忆化搜索
- linux slub分配器浅析
- 掼蛋的玩法
- 2.8 list
- Python字符串的encode与decode研究心得--乱码问题解决方法
- Maven配置文件pom.xml详解
- 多核心Linux内核路径优化的不二法门之-slab与伙伴系统
- 自动化运维工具Ansible详细部署
- 2017《JAVA技术》预备作业-计科1502-19-何俏依