【题目链接】

  • 点击打开链接

【思路要点】

  • 显然,任意时刻游戏棋盘的轮廓线是单调的。
  • 因此,我们可以用一个\(O(N+M)\)位的二进制数描述一个轮廓线。
  • 记忆化搜索即可,时间复杂度\(O(M*\binom{N+M}{N})\)。

【代码】

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 105;
const int MAXS = 1 << 21;
const int INF = 1e9;
template <typename T> void read(T &x) {int f = 1; x = 0;char ch = getchar();for (; !isdigit(ch); ch = getchar()) if (ch == '-') f = -f;for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';x *= f;
}
int bit[MAXN], n, m;
int val[MAXN][MAXN];
int ans[MAXS], bns[MAXS];
bool vis[MAXS];
int get(int s, bool first) {if (s == (1 << m) - 1) return 0;if (first) {if (vis[s]) return ans[s];int tans = -INF, x = m, y = 0;for (int i = n + m; i >= 1; i--) {if (bit[i] & s) {if (i != 1 && (bit[i - 1] & s) == 0) tans = max(tans, get(s ^ bit[i] ^ bit[i - 1], false) + val[y + 1][x]);x--;} else y++;}vis[s] = true;return ans[s] = tans;} else {if (vis[s]) return bns[s];int tans = INF, x = m, y = 0;for (int i = n + m; i >= 1; i--) {if (bit[i] & s) {if (i != 1 && (bit[i - 1] & s) == 0) tans = min(tans, get(s ^ bit[i] ^ bit[i - 1], true));x--;} else y++;}vis[s] = true;return bns[s] = tans;}
}
int main() {read(n), read(m);for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)read(val[i][j]);int tsum = 0;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++) {int x; read(x);val[i][j] += x;tsum += x;}for (int i = 1; i <= n + m; i++)bit[i] = 1 << (i - 1);printf("%d\n", get(((1 << m) - 1) << n, 1) - tsum);return 0;
}

【BZOJ5248】【2018多省省队联测】一双木棋相关推荐

  1. bzoj5248 [2018多省省队联测]一双木棋

    5248: [2018多省省队联测]一双木棋 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 155  Solved: 132 [Submit][St ...

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

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

  3. bzoj 5248: [2018多省省队联测]一双木棋

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

  4. BZOJ 5248: [2018多省省队联测]一双木棋(对抗搜索+记忆化)

    题目传送门 https://www.lydsy.com/JudgeOnline/problem.php?id=5248 思路 显然每个局面,落子无悔后都是一个从上往下的非严格递减阶梯. 所以有效的状态 ...

  5. bzoj 5248: [2018多省省队联测]一双木棋 博弈论+状压dp

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

  6. bzoj5252: [2018多省省队联测]林克卡特树

    题目链接 bzoj5252: [2018多省省队联测]林克卡特树 题解 tu优化! 其实之前做过类似的,思想类似,二分一个价值的偏移量来逼近限制k,大概是clj出的一道集训队胡策啥来着?? 对于本题, ...

  7. 「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess

    「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess 学校省选模拟居然拿九省联考来考 然而我还是\(too\space young\),搞不懂什么叫最优 让二者的答案最接近可 ...

  8. 【洛谷】【博弈搜索】P4363 [九省联考2018]一双木棋chess

    洛谷 P4363 [九省联考2018]一双木棋chess 题目大意 ◇题目传送门◆ 分析 根据题目所给定的规则,可以发现对于每一行,其下面一行上放的棋子数目不可能多于上面的一行. 所以我们可以将每行上 ...

  9. 「九省联考 2018」一双木棋

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

最新文章

  1. oracle取得表中总记录数最快的方法
  2. 信息系统项目管理师-项目风险管理考点笔记
  3. 使用vmware converter转物理机linux的问题
  4. mysql数据丢失_当数据被误删除/误操作后造成数据丢失。你尝试过用什么手段来挽救数据/损失?...
  5. 高仿真的类-页面交互
  6. python gis 实例_用Python作GIS之五:从示例入手—example函数
  7. 服务器中文件设置密码,共享服务器文件权限怎么设置密码
  8. 谷歌资助OSTIF审计8个重要开源项目,提升软件供应链安全
  9. JDK打印的疑问:CUPSPrinter有何用处?
  10. centos6配置mysql5.7_CentOS 6.7 下 MYSQL 5.7 的安装与配置
  11. mysql_连接查询
  12. matlab 添加断点,matlab设置断点
  13. SDN概述,SDN是什么?
  14. 2022-2027年(新版)中国石墨烯行业竞争态势及发展前景预测报告
  15. 2021全国大学生电子设计竞赛C题
  16. python代码变成so
  17. Ubuntu 下访问摄像头 及将摄像头数据重定向到http协议 远程访问摄像头
  18. 腾讯棋牌开发商(深圳泊众):投身网络棋牌游戏有风险
  19. “征服自己是最大的胜利,被征服是最大的耻辱和邪恶。”
  20. 【论文导读】- Cluster-driven Graph Federated Learning over Multiple Domains(聚类驱动的图联邦学习)

热门文章

  1. 微软开放内部AI系列培训课程:10大技能,edX可免费注册
  2. File Converter
  3. R语言-单个总体均值的t检验
  4. linux系统的服务器怎么设置上电自启,Linux系统开机自启流程
  5. 国科大计算机所考研成绩,2020国科大计算所计算机软件与理论复试经验复试公告复试真题复试分数成绩查询...
  6. LINX命令压缩和归档
  7. python识别图片文字_使用百度文字识别API进行图片中文字的识别
  8. ubuntu播放mp4
  9. MICROSOFT TEAMS MACOS版本本地权限提升漏洞
  10. FDA认证辅导,FDA要求所有在美国上市的医疗器械产品都需要的步骤