题面

https://www.luogu.org/problem/P4363

题解

很套路的$hash$状态$+dp$。

可知棋子形成的形状一定是一个连续的倒楼梯形(楼梯向右延伸的长度可以不连续,但一定单调)

$hash$轮廓就行了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#define ri register int
#define N 11
#define LL long long
#define INF 1000000007
#define mod 1233107
using namespace std;
int a[N][N],b[N][N];
LL pow[N];
int n,m;
vector<int>f[mod];
vector<LL>g[mod];int dfs(LL x) {int ln[N];int yx=x%mod;for (ri i=0;i<g[yx].size();i++) if (g[yx][i]==x) return f[yx][i];g[yx].push_back(x);f[yx].push_back(0);int tl=f[yx].size()-1;int tot=0,opt,ret;LL tx=x,nx;for (ri i=n;i>=1;i--) {ln[i]=x/pow[i];x%=pow[i];}ln[0]=m+1;for (ri i=1;i<=n;i++) tot+=ln[i];if (tot==n*m) return 0;if (tot%2==0) opt=1; else opt=0;if (opt) ret=-INF; else ret=INF;for (ri i=1;i<=n;i++) if (ln[i-1]>ln[i] && ln[i]+1<=m) {nx=tx+pow[i];if (opt) {int t=dfs(nx);if (a[i][ln[i]+1]+t>ret) ret=a[i][ln[i]+1]+t;}else {int t=dfs(nx);if (-b[i][ln[i]+1]+t<ret) ret=-b[i][ln[i]+1]+t;}}return f[yx][tl]=ret;
}int main(){cin>>n>>m;for (ri i=1;i<=n;i++) for (ri j=1;j<=m;j++) cin>>a[i][j];for (ri i=1;i<=n;i++)for (ri j=1;j<=m;j++) cin>>b[i][j];pow[1]=1LL;for (ri i=2;i<=n;i++) pow[i]=pow[i-1]*11LL;printf("%d\n",dfs(0));
}

转载于:https://www.cnblogs.com/shxnb666/p/11426246.html

【九省联考2018】一双木棋相关推荐

  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. BZOJ5248:[九省联考2018]一双木棋——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5248 https://www.luogu.org/problemnew/show/P4363#su ...

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

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

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

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

  7. 九省联考2018 一双木棋

    题目链接:戳我 我们容易知道,棋子的摆放形状应该是一个阶梯性(某dalao:来来来,轮廓线DP!) 我们选择用状态压缩来表示整个棋盘的排放形态(11进制压位,每个位上的数都表示一行的状态) 这样子我们 ...

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

    先分析状态.画几张图你发现,一个合法的状态,它从第一行到第nnn行,每一行上棋子的数量一定是单调不增的,并且棋子一定是从左到右紧密排列. 写个dfsdfsdfs爆搜一下合法状态,最多也就181818万 ...

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

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

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

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

最新文章

  1. tf.keras.layers.MaxPool2D 示例 池化层
  2. MySQL学习(二)复制
  3. 零售流通ERP系统——基础信息的确立与实施
  4. 21天学通python第二版-电子工业出版社-网上书店
  5. 【技术综述】深度学习中的数据增强(下)
  6. VS 之 InstallShield Limited Edition for Visual Studio 2015 图文教程
  7. 我常用的python函数(part2)--executemany方法
  8. 精准设计类素材方向,搜索把握细节
  9. thinkphp模板常用的方法
  10. localdatetime 格式化_LocalDateTime取代Data处理时间问题
  11. Eureka源码深度刨析-(5)EurekaServer处理服务发现
  12. dev:dev fatal: HttpRequestException encountered. remote: Invalid username or password. fatal: Authen
  13. Typora主要常用快捷键
  14. Atom | 用最酷的编辑器 写最美的代码
  15. 美团热修复 Robust 方案接入(一)
  16. 利用JDBC连接服务器数据库(Android)
  17. Java递归查询某个节点下所有子节点多级信息(递归部门查询,递归树形结构数据查询)
  18. Crosswalk 集成到 Android Studio
  19. Arduino控制WS2812灯带(灯环)
  20. SQL报错Every derived table must have its own alias

热门文章

  1. 硕士选题历程:集群+电子样机+机载视觉+生物信息+智慧控制
  2. SPADE(GauGAN)算法笔记
  3. c语言求单链表倒数第k个节点,链表中倒数第k个结点
  4. 字节跳动历年校招Android面试真题解析,大厂直通车!
  5. python少儿编程学习
  6. java 控制台输出设置字体颜色
  7. 15-Figma-布局约束和栅格
  8. Oracle主机down机问题分析
  9. eja变送器故障代码al01_eja变送器表头常见错误代码代表含义你造吗?
  10. WinSCP+putty整合基础使用!!!!!!!!!!!!!!!!!!!