传送门

这对抗搜索是个啥玩意儿……

首先可以发现每一行的棋子数都不小于下一行,且局面可由每一行的棋子数唯一表示,那么用一个m+1进制数来表示当前局面,用longlong存,开map记忆化搜索

然后时间复杂度的问题,rqy这样说的

然后这个对抗搜索的话……个人理解就是因为要最大化分值的差,所以在一个人下棋的时候令他得分最大,另一个人得分最小

  1. //minamoto
  2. #include<cstdio>
  3. #include<iostream>
  4. #include<map>
  5. #define ll long long
  6. using namespace std;
  7. #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
  8. char buf[<<],*p1=buf,*p2=buf;
  9. template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
  10. template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,:;}
  11. inline int read(){
  12. #define num ch-'0'
  13. char ch;bool flag=;int res;
  14. while(!isdigit(ch=getc()))
  15. (ch=='-')&&(flag=true);
  16. for(res=num;isdigit(ch=getc());res=res*+num);
  17. (flag)&&(res=-res);
  18. #undef num
  19. return res;
  20. }
  21. const int N=,base=,inf=0x3f3f3f3f;
  22. map<ll,int> mp;int a[N][N],b[N][N],bl[N],n,m;
  23. inline ll hsh(){
  24. ll res=;
  25. for(int i=;i<=n;++i) res=res*base+bl[i];
  26. return res;
  27. }
  28. inline void unzip(ll S){
  29. for(int i=n;i;--i) bl[i]=S%base,S/=base;
  30. }
  31. inline int getnxt(){
  32. int res=;
  33. for(int i=;i<=n;++i) res+=bl[i];
  34. return res&;
  35. }
  36. int dfs(ll S){
  37. if(mp.find(S)!=mp.end()) return mp[S];
  38. unzip(S);
  39. int type=getnxt(),res=type?inf:-inf;
  40. for(int i=;i<=n;++i)
  41. if(bl[i-]>bl[i]){
  42. ++bl[i];ll h=hsh();
  43. type?cmin(res,dfs(h)-b[i][bl[i]]):cmax(res,dfs(h)+a[i][bl[i]]);
  44. --bl[i];
  45. }
  46. return mp[S]=res;
  47. }
  48. int main(){
  49. // freopen("testdata.in","r",stdin);
  50. n=read(),m=read(),bl[]=m;
  51. for(int i=;i<=n;++i)
  52. for(int j=;j<=m;++j)
  53. a[i][j]=read();
  54. for(int i=;i<=n;++i)
  55. for(int j=;j<=m;++j)
  56. b[i][j]=read();
  57. for(int i=;i<=n;++i) bl[i]=m;
  58. ll full=hsh();mp[full]=;
  59. dfs();
  60. printf("%d\n",mp[]);
  61. return ;
  62. }

P4363 [九省联考2018]一双木棋chess(对抗搜索+记忆化搜索)的更多相关文章

  1. 洛谷 P4363 [九省联考2018]一双木棋chess 解题报告

    P4363 [九省联考2018]一双木棋chess 题目描述 菲菲和牛牛在一块\(n\)行\(m\)列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落 ...

  2. BZOJ.5248.[九省联考2018]一双木棋chess(对抗搜索 记忆化)

    BZOJ 洛谷P4363 [Update] 19.2.9 重做了遍,感觉之前写的有点扯= = 首先棋子的放置情况是阶梯状的. 其次,无论已经放棋子的格子上哪些是黑棋子哪些是白棋子,之前得分如何,两人在 ...

  3. 洛谷 P4363 [九省联考2018]一双木棋chess 题解

    题目链接:https://www.luogu.org/problemnew/show/P4363 分析: 首先博弈,然后考虑棋盘的规则,因为一个子在落下时它的上面和左面都已经没有空位了,所以棋子的右下 ...

  4. luogu P4363 [九省联考2018]一双木棋chess

    传送门 对抗搜索都不会,我真是菜死了qwq 首先根据题目条件,可以发现从上到下每一行的棋子数是单调不增的,然后n m都比较小,如果把状态搜出来,可以发现合法状态并不多,所以可以用一个11进制数表示状态 ...

  5. 【题解】Luogu P4363 [九省联考2018]一双木棋chess

    原题传送门 这道题珂以轮廓线dp解决 经过推导,我们珂以发现下一行的棋子比上一行的棋子少(或等于),而且每一行中的棋子都是从左向右依次排列(从头开始,中间没有空隙) 所以每下完一步棋,棋盘的一部分是有 ...

  6. P4363 [九省联考2018]一双木棋chess

    思路 容易发现只能在轮廓线的拐点处落子,所以棋盘的状态可以用一个n+m长度的二进制数表示 转移就是10变成01 代码 #include <cstdio> #include <algo ...

  7. 洛谷P4363 [九省联考2018]一双木棋chess 【状压dp】

    题目 菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束. 落子的规则是:一个格子可以落子当且仅当这个 ...

  8. P4363 [九省联考2018]一双木棋

    题面 这种搜索要把后继状态都跑出来之后取Min/Max 也就是回溯的时候进行操作 记得用hash进行记忆化(用map不开O2会TLE) #include<iostream> #includ ...

  9. [九省联考2018]一双木棋chess——搜索+哈希

    题目:bzoj5248 https://www.lydsy.com/JudgeOnline/problem.php?id=5248 洛谷P4363 https://www.luogu.org/prob ...

随机推荐

  1. NOTE:rfc5766-turn-server

    NOTE:This project is active in Google code: http://code.google.com/p/rfc5766-turn-server/ 启动方法:./tur ...

  2. 九度OJ 1111:单词替换 (查找)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4473 解决:1268 题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔 ...

  3. 无法启动FTP站点,服务目前停止

    在本地搭建了一个FTP服务器(windows搭建FTP服务器实战),再启动的时候提示错误: 错误提示信息: 根据提示可以查出问题原因:FTP服务没有开启 启动服务,再次重启站点服务.一切OK. 亲测好 ...

  4. 基于springboot的Dubbo的常规总结

    1.引入jar包: <!-- Spring Boot Dubbo 依赖 --> <dependency> <groupId>com.alibaba.spring.b ...

  5. Codeforces Round #178 (Div. 2) B. Shaass and Bookshelf —— DP

    题目链接:http://codeforces.com/contest/294/problem/B B. Shaass and Bookshelf time limit per test 1 secon ...

  6. (转)Java经典设计模式(3):十一种行为型模式(附实例和详解)

    原文出处: 小宝鸽 Java经典设计模式共有21中,分为三大类:创建型模式(5种).结构型模式(7种)和行为型模式(11种). 本文主要讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:J ...

  7. 通过Chrome浏览器进行android调试/Remote Debugging on Android with Chrome

    The way your web content behaves on mobile can be dramatically different from the desktop experience ...

  8. cnn handwrite使用原生的TensorFlow进行预测

    100个汉字,放在data目录下.直接将下述文件和data存在同一个目录下运行即可. 关键参数: run_mode = "train" 训练模型用,修改为validation 表示 ...

  9. oracle 左右链接

    数据表的连接有: 1.内连接(自然连接): inner只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接 ...

  10. POJ 3104 Contestants Division

    Contestants Division Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10597   Accepted:  ...