题面:

菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手。 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束。
落子的规则是:一个格子可以落子当且仅当这个格子内没有棋子且这个格子的左侧及上方的所有格子内都有棋子。
棋盘的每个格子上,都写有两个非负整数,从上到下第i 行中从左到右第j 列的格 子上的两个整数记作A_{i,j}A
i,j
​ 、B_{i,j}B
i,j
​ 。在游戏结束后,菲菲和牛牛会分别计算自己的得分:菲菲的得分是所有有黑棋的格子上的A_{i,j}A
i,j
​ 之和,牛牛的得分是所有有白棋的格子上的B_{i,j}B
i,j
​ 的和。
菲菲和牛牛都希望,自己的得分减去对方的得分得到的结果最大。现在他们想知道,在给定的棋盘上,如果双方都采用最优策略且知道对方会采用最优策略,那么,最终的结果如何。

输入输出格式
输入格式:
从文件chess.in 中读入数据。

输入第一行包含两个正整数n;m,保证n;m <= 10。

接下来n 行,每行m 个非负整数,按从上到下从左到右的顺序描述每个格子上的 第一个非负整数:其中第i 行中第j 个数表示A_{i,j}A i,j。

接下来n 行,每行m 个非负整数,按从上到下从左到右的顺序描述每个格子上的 第二个非负整数:其中第i 行中第j 个数表示B_{i,j}B i,j。

输出格式:
输出到文件chess.out 中。

输出一个整数,表示菲菲的得分减去牛牛的得分的结果。

输入输出样例
输入样例#1:

2 3
2 7 3
9 1 2
3 7 2
2 3 1

输出样例#1:

2

输入样例#2:

5 5
10754 29299 15325 7127 5596
86486 13090 15278 17110 79440
51131 46756 69875 97422 9049
33028 93355 2945 50011 41293
64045 68762 81412 35625 50504
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

输出样例#2:

611924

说明
样例1说明:

棋盘如图所示,双方都采用最优策略时,棋局如下:

• 菲菲下在第1 行第1 列(这是第一步时唯一可以落子的格子);

• 牛牛下在第1 行第2 列;

• 菲菲下在第2 行第1 列;

• 牛牛下在第1 行第3 列;

• 菲菲下在第2 行第2 列;

• 牛牛下在第2 行第3 列(这是这一步时唯一可以落子的格子);

• 填满棋盘,游戏结束,盘面如下。

菲菲的得分为:2 + 9 + 1 = 12 ;牛牛的得分为:7 + 2 + 1 = 10 。

对于所有的测试数据,n;m <= 10 ,A_{i,j}A i,j ; B_{i,j}B i,j<= 100000。

对于编号为奇数的测试点,保证所有的B_{i,j}B i,j= 0 。

轮廓线DP

#include<bits/stdc++.h>#define N 11
#define inf (1<<30)inline int min(int x, int y){return x < y ? x : y;
}
inline int max(int x, int y){return x > y ? x : y;
}int n,m;
int a[N][N], b[N][N];
int f[1<<(N<<1)];
int vis[1<<(N<<1)];inline int dfs(int now, int who){if(vis[now])return f[now];f[now] = who ? - inf : inf;int x = n, y = 0;for(int i = 0; i < n + m - 1; ++i){if(now >> i & 1)--x;else++y;if((now >> i & 3) != 1)continue;int nxt = now ^ (3 << i);if(who)f[now] = max(f[now], dfs(nxt, who ^ 1) + a[x][y]);else f[now] = min(f[now], dfs(nxt, who ^ 1) - b[x][y]);}vis[now] = true;return f[now];
}int main()
{scanf("%d%d", &n, &m);for(int k = 1; k <= 2; ++k)for(int i = 0; i < n ;++i)for(int j = 0; j < m; ++j){if(k == 1)scanf("%d", &a[i][j]);else scanf("%d", &b[i][j]);}vis[((1<<n) - 1)<<m] = true;printf("%d\n", dfs((1<<n) - 1, 1));return 0;
}

九省联考2018--一双木棋chess相关推荐

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

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

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

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

  3. p4363 [九省联考2018]一双木棋chess

    传送门 分析 我们用0表示向右,1表示向上 于是可以得到一条江棋盘分为两块的线 直接dp即可 代码 #include<iostream> #include<cstdio> #i ...

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

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

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

    analysis 这是一道很好的状压dp 这个题首先需要分析出任何一个合法的状态都可以化为从左下角到右上角的一条对角线 这样一来状态就很好表示了: 我们考虑设f[s]表示从状态s出发,最后先手减后手的 ...

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

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

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

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

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

    题目描述: 有一个 n∗m的方格, Alice 和 Bob 玩游戏.每次每人可以选择一个格子占领,前提是这个格子未被占领且它左上方的所有格子都已被占领. 第 i行第 j 列的格子若被 Alice 占领 ...

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

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

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

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

最新文章

  1. 这家中国芯片公司年利润追上英伟达了?假的
  2. exchange作业
  3. JavaScript 有多灵活?
  4. docker desktop一直starting不变化
  5. wxWidgets:wxTextOutputStream类用法
  6. boost::fusion::single_view用法的测试程序
  7. Java计算一段程序的运行时间
  8. 软件设计原则(二)单一职责原则 -Single Responsibility Principle
  9. python读取html_从零开始的Python爬虫教程(一):获取HTML文档
  10. 【python pandas excel操作】
  11. wireshark使用教程 linux,Linux入门教程:ubuntu下安装wireshark(以及配置非root),这个强大的工具可以捕...
  12. 互联网晚报 | 3月28日 星期一 | 上海医保局辟谣:新冠患者要自负医疗费用不属实 ;十荟团关停全国所有业务...
  13. 对于一组给定的叶子结点_高糊图片可以做什么?Goodfellow等人用它生成一组合理图像...
  14. (03)System Verilog 通用总线激励驱动方法
  15. system单元的几个内存处理方法
  16. JS中一些常用的函数(持续更新)
  17. 人脸识别数据集---CAS-PEAL-R1
  18. 易语言lol自动接受源码分享以及lolApi相关使用教程
  19. 以后你肯定会用到的,25个常用Matplotlib图的Python代码,可以不会不能没有,建议收藏
  20. 谷歌浏览器86版_Google 谷歌浏览器 Chrome v87.0.4280.66 Win Mac Linux 安卓等稳定版

热门文章

  1. 吾爱论坛再现神作,百度OCR之人脸融合v1.0
  2. 重装系统后,如何找回Chrome中的原有书签?
  3. ROC-RK3308-CC开发实例总结--PAJ7620手势传感器模块调试
  4. Android:UI控件ViewPager,notifyDataSetChanged
  5. python识别图片文字_使用百度文字识别API进行图片中文字的识别
  6. Android 9.0 10.0 11.0 开机动画支持mp4 视频播放
  7. Java架构直通车——ElasticSearch深度分页解决方案
  8. Mac Iterm2各种用法和配置
  9. EJA压力变送器使用过程中有那些常见故障
  10. 蚁群算法(独辟蹊径的进化算法)