Alice和Bob轮流在n*m的棋盘上放棋子

a[i][j]表示Alice放在这的收益,b[i][j]表示Bob放在这的收益

一个地方没有棋子且它的左边上边都有棋子才能放棋子,边界外视为有一圈棋子

n,m<=10,求两人都用最优方案时,Alice可以赢多少

sol:上次用的轮廓线dp,现在已然不会写了...真是个sb

写了上次口胡出来的方法,考虑棋子放出来的形状,显然,每行棋子小于等于上一行放的棋子

那状态也不多嘛,可以哈希出来然后对抗搜索

mask[i]表示第i行已经放了多少棋子

对抗搜索的时候,每一步更换游戏者,游戏者A要让ret尽量大,游戏者B要让ret尽量小

不卡自然溢出好评

  1. #include<bits/stdc++.h>
  2. #define LL unsigned long long
  3. using namespace std;
  4. inline LL read()
  5. {
  6. LL x = ,f = ;char ch = getchar();
  7. for(;!isdigit(ch);ch = getchar())if(ch == '-')f = -f;
  8. for(;isdigit(ch);ch = getchar())x = * x + ch - '';
  9. return x * f;
  10. }
  11. int n,m;
  12. int a[][][];
  13. int mask[];
  14. map<LL,int> hsh;
  15. const LL base = ;
  16. inline LL getmask()
  17. {
  18. LL ans = ;
  19. for(int i=;i<=n;i++)ans = ans * base + mask[i];
  20. return ans;
  21. }
  22. inline int dfs(LL curmask,int opt)
  23. {
  24. if(hsh.count(curmask))return hsh[curmask];
  25. int ret = opt ? 1e9 : -1e9;
  26. for(int i=;i<=n;i++)
  27. if(mask[i] + <= mask[i - ])
  28. {
  29. mask[i]++;
  30. if(opt)ret = min(ret,dfs(getmask(),opt ^ ) - a[][i][mask[i]]);
  31. else ret = max(ret,dfs(getmask(),opt ^ ) + a[][i][mask[i]]);
  32. mask[i]--;
  33. }
  34. return hsh[curmask] = ret;
  35. }
  36. int main()
  37. {
  38. n = read(),m = read();
  39. for(int k=;k<=;k++)
  40. for(int i=;i<=n;i++)
  41. for(int j=;j<=m;j++)
  42. a[k][i][j] = read();
  43. for(int i=;i<=n;i++)mask[i] = m;
  44. hsh[getmask()] = ;memset(mask,,sizeof(mask));
  45. mask[] = m;
  46. cout<<dfs(getmask(),);
  47. }

九省联考2018 D1T1 一双木棋的更多相关文章

  1. 【BZOJ5248】【九省联考2018】一双木棋(搜索,哈希)

    [BZOJ5248][九省联考2018]一双木棋(搜索,哈希) 题面 BZOJ Description 菲菲和牛牛在一块n行m列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手.棋局开始时,棋盘上没有任何 ...

  2. LOJ#2471「九省联考 2018」一双木棋 MinMax博弈+记搜

    题面 戳这里 题解 因为每行取的数的个数是单调不增的,感觉状态数不会很多? 怒而记搜,结果过了... #include<bits/stdc++.h> #define For(i,x,y) ...

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

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

  4. [九省联考2018]秘密袭击coat

    [九省联考2018]秘密袭击coat 研究半天题解啊... 全网几乎唯一的官方做法的题解:链接 别的都是暴力.... 要是n=3333暴力就完了. 一.问题转化 每个联通块第k大的数,直观统计的话,会 ...

  5. 【BZOJ5250】[九省联考2018]秘密袭击(动态规划)

    [BZOJ5250][九省联考2018]秘密袭击(动态规划) 题面 BZOJ 洛谷 给定一棵树,求其所有联通块的权值第\(k\)大的和. 题解 整个\(O(nk(n-k))\)的暴力剪剪枝就给过了.. ...

  6. 「九省联考 2018」IIIDX 解题报告

    「九省联考 2018」IIIDX 这什么鬼题,送的55分要拿稳,实测有60? 考虑把数值从大到小摆好,每个位置\(i\)维护一个\(f_i\),表示\(i\)左边比它大的(包括自己)还有几个数可以选 ...

  7. [BZOJ 5252][LOJ 2478][九省联考2018] 林克卡特树

    [BZOJ 5252][LOJ 2478][九省联考2018] 林克卡特树 题意 给定一个 \(n\) 个点边带权的无根树, 要求切断其中恰好 \(k\) 条边再连 \(k\) 条边权为 \(0\) ...

  8. LOJ #2473. 「九省联考 2018」秘密袭击

    #2473. 「九省联考 2018」秘密袭击 链接 分析: 首先枚举一个权值W,计算这个多少个连通块中,第k大的数是这个权值. $f[i][j]$表示到第i个节点,有j个大于W数的连通块的个数.然后背 ...

  9. [luogu] P4364 [九省联考2018]IIIDX(贪心)

    P4364 [九省联考2018]IIIDX 题目背景 Osu 听过没?那是Konano 最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐游戏.现在,他在世界知名游戏公司KONMAI ...

随机推荐

  1. SpringMVC基于代码的配置方式(零配置,无web.xml)

    基于配置文件的web项目维护起来可能会更方便,可是有时候我们会有一些特殊的需求,比方防止客户胡乱更改配置,这时候我们须要给配置隐藏到代码中. 1.创建一个动态web项目(无需web.xml) 2.右键 ...

  2. struts2一个实例中遇到的问题

    今天实现了一个登录功能的Struts2小程序. 期间遇到了许多问题,记忆犹新的是 (1)新版本的tomcat9和eclipse Neon Release (4.6.0) 发生了冲突,启动服务器的时候老 ...

  3. MATLAB循环结构:break+continue+嵌套

    break语句:终止当前循环,继续执行循环语句的下一语句: continue语句:跳过循环体的后面语句,开始下一个循环: 例:求[100,200]之间第一个能被21整除的整数 :200 %循环语句 ) ...

  4. Scout YYF I (概率+矩阵快速幂)

    YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into the enemy's ba ...

  5. iOS与JS开发交互总结

    hybrid.jpg 前言 Web 页面中的 JS 与 iOS Native 如何交互是每个 iOS 猿必须掌握的技能.而说到 Native 与 JS 交互,就不得不提一嘴 Hybrid. Hybri ...

  6. 基于flask的web微信

    web微信 1.扫码获取头像 当你打开web微信的时候,因为http是无状态的,web微信如何实时的获取用户的扫码动作? 那么这里用到的是长轮询的方式. from flask import Flask ...

  7. Linux项目部署发布

    Linux项目部署发布 1.部署环境准备,准备python3和虚拟环境解释器,virtualenvwrapper pip3 install -i https://pypi.douban.com/sim ...

  8. Linux kernel config and makefile system

    转载自:http://blog.csdn.net/dreamxu/article/details/6125545 http://www-900.ibm.com/developerWorks/cn/li ...

  9. Kindeditor 函数用途

    1.loadScript  加载文件   2.updateState 更新工具条状态   afterCreate在dom加载的时候执行,dom加载完之前执行的 K.ready dom加载完之后执行   ...

  10. 第五章 python中的异常处理

    每种编程语言都会有自己的异常处理机制,虽然各有特色,但基本上都差不多,那么python中强大异常处理机制是什么样的呢? 一.异常: python用异常对象来表示异常情况,遇到错误后,会引发异常.如果异 ...