P4363 [九省联考2018]一双木棋
这种搜索要把后继状态都跑出来之后取Min/Max
也就是回溯的时候进行操作
记得用hash进行记忆化(用map不开O2会TLE)
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<map>
#define rg register
#define max(x,y) (x)<(y)?(y):(x)
#define min(x,y) (x)>(y)?(y):(x)
using namespace std;
int n,m,A[][],B[][],ri[];//ri[]:每行向右延伸到了多少
map<long long,int>dp;
inline int read()
{
rg int save=,w=;rg char q=getchar();
while(q<''||q>''){if(q=='-')w=-;q=getchar();}
while(q>=''&&q<='')save=(save<<)+(save<<)+q-'',q=getchar();
return save*w;
}
inline long long zip()//算出hash值
{
rg long long hash=;
for(rg int i=;i<=n;++i)hash=(hash<<)+(hash<<)+hash+ri[i];
return hash;
}
inline void recover(rg long long hash)//把状态解析出来
{
for(rg int i=n;i>=;--i)ri[i]=hash%,hash/=;
}
int dfs(rg long long hash,rg bool b)//当前状态为hash,是谁下子(b==1为菲菲,b==0为牛牛)
{
rg int ans=((!b)?:-),i;
if(dp[hash])return ((dp[hash]==-)?:dp[hash]);//如果该状况已经拓展过了,把记忆化的值返回即可
//且因为A数组与B数组相加减的答案可能为0,而dp[]需要记录答案,所以当答案为0时,赋给dp[]的值为-1
recover(hash);
for(i=;i<=n;++i)//枚举在哪一行向右走
{
if(ri[i]<ri[i-])
{
ri[i]++;
rg int behind=dfs(zip(),!b);//回溯回来的答案为behind
if(b)ans=max(ans,behind+A[i][ri[i]]);//菲菲尽量使差变大 (差:菲菲-牛牛)
else ans=min(ans,behind-B[i][ri[i]]);//牛牛尽量使差变小
ri[i]--;//回溯,试着走别的点
}
}
if(ans==((!b)?:-))ans=;
dp[hash]=(!ans)?-:ans;
return ans;
}
int main()
{
n=read(),m=read();
rg int i,j;
for(i=;i<=n;++i)
for(j=;j<=m;++j)
A[i][j]=read();
for(i=;i<=n;++i)
for(j=;j<=m;++j)
B[i][j]=read();
// Take me to your heart, take me to your soul, give me your hand and hold me.
ri[]=m;
printf("%d\n",dfs(,));
return ;
}
P4363 [九省联考2018]一双木棋的更多相关文章
- 洛谷 P4363 [九省联考2018]一双木棋chess 解题报告
P4363 [九省联考2018]一双木棋chess 题目描述 菲菲和牛牛在一块\(n\)行\(m\)列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落 ...
- 洛谷 P4363 [九省联考2018]一双木棋chess 题解
题目链接:https://www.luogu.org/problemnew/show/P4363 分析: 首先博弈,然后考虑棋盘的规则,因为一个子在落下时它的上面和左面都已经没有空位了,所以棋子的右下 ...
- luogu P4363 [九省联考2018]一双木棋chess
传送门 对抗搜索都不会,我真是菜死了qwq 首先根据题目条件,可以发现从上到下每一行的棋子数是单调不增的,然后n m都比较小,如果把状态搜出来,可以发现合法状态并不多,所以可以用一个11进制数表示状态 ...
- 【题解】Luogu P4363 [九省联考2018]一双木棋chess
原题传送门 这道题珂以轮廓线dp解决 经过推导,我们珂以发现下一行的棋子比上一行的棋子少(或等于),而且每一行中的棋子都是从左向右依次排列(从头开始,中间没有空隙) 所以每下完一步棋,棋盘的一部分是有 ...
- P4363 [九省联考2018]一双木棋chess
思路 容易发现只能在轮廓线的拐点处落子,所以棋盘的状态可以用一个n+m长度的二进制数表示 转移就是10变成01 代码 #include <cstdio> #include <algo ...
- 洛谷P4363 [九省联考2018]一双木棋chess 【状压dp】
题目 菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束. 落子的规则是:一个格子可以落子当且仅当这个 ...
- P4363 [九省联考2018]一双木棋chess(对抗搜索+记忆化搜索)
传送门 这对抗搜索是个啥玩意儿…… 首先可以发现每一行的棋子数都不小于下一行,且局面可由每一行的棋子数唯一表示,那么用一个m+1进制数来表示当前局面,用longlong存,开map记忆化搜索 然后时间 ...
- [BZOJ5248][九省联考2018]一双木棋(连通性DP,对抗搜索)
5248: [2018多省省队联测]一双木棋 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 43 Solved: 34[Submit][Status ...
- BZOJ.5248.[九省联考2018]一双木棋chess(对抗搜索 记忆化)
BZOJ 洛谷P4363 [Update] 19.2.9 重做了遍,感觉之前写的有点扯= = 首先棋子的放置情况是阶梯状的. 其次,无论已经放棋子的格子上哪些是黑棋子哪些是白棋子,之前得分如何,两人在 ...
随机推荐
- Redis 系列
Redis 系列 [Redis 系列(01)安装配制] [Redis 系列(02)数据结构] [Redis 系列(03-1)进阶 - 发布订阅] [Redis 系列(03-2)进阶 - 事务] [Re ...
- 还抱着 Java 8 不放,也是醉了!
作者 | Trisha Gee原文:https://dzone.com/articles/beyond-java-8译者 | 弯月 责编 | 屠敏出品 | CSDN(ID:CSDNnews) 不说 A ...
- PostgreSQL 荣获 2019 年 O'Reilly 终身成就奖
Java技术栈 www.javastack.cn 优秀的Java技术公众号 来自:开源中国社区 https://www.oschina.net/news/108436/pg-wins-2019-ore ...
- kubernetes里面有时候centos源用不了
kubernetes里面有时候centos源用不了,快速配一个阿里云的源. mkdir /etc/yum.repos.d/yangback;mv /etc/yum.repos.d/* /etc/yum ...
- db2中将表中的某一字段设置为自增长
DB2可以使用generated always as identity 将某一个字段指定为自增长的字段: 这表示id自动是一个自增长的字段,它从1开始增加每次增加1.也可以通过generated 将字 ...
- 三、bootstrap-treeview
一.bootstrap-treeview 修饰标签为徽章 参考 https://www.cnblogs.com/bin521/p/8403588.html
- Java集合类里面最基本的接口
Collection:代表一组对象,每一个对象都是它的子元素. Set:不包含重复元素的Collection. List:有顺序的Collection,并且可以包含重复元素. Map:可以把键(key ...
- python中map的排序以及取出map中取最大最小值
map排序: 1.按key排序: items=dict.items() items.sort() sorted(dict.items(),key=lambda x:x[0],reverse=False ...
- event(1)
event event(事件流)是 window对象的一个属性 在JS中事件有2种类型 一种是冒泡类型 一种是捕获类型 冒泡类型最先是在IE中出现,而捕获类型最先在标准的DOM中出现,不过最终IE得胜 ...
- excel acm 高校排名(hdoj)
其实写一个程序是最方便的... 不用每次进行很多次操作. 当然,能获得后台的数据更好…… e.g. 链接: https://pan.baidu.com/s/1a7s85oaKGam1-0mJ2v39u ...