洛谷P4363 一双木棋 chess

省选最水的一道题了。

且看我数个月AC一道题......

具体是这样的:
我们发现这个下了棋的地方一定形成一个锯齿形,那么怎么状态压缩呢?

维护轮廓线!

从左下角出发,向上为1,向右为0即可。

然后我们就开心的DP…等等
这按照什么顺序DP啊!!
好,那么我们退而求次,记忆化搜索!
然后就没有然后了…

需要注意的地方:

  • 记得判断max还是min
  • 二进制位运算一如既往的烦人
  • DFS起点和终点的处理
  • 求最大差值,转化为加A减B即可

那么我们调了一年后终于A了!!

 #include <cstdio>
#include <algorithm>
using namespace std;
const int N = ,INF = 0x7f7f7f7f;
int m,n,mp[<<],A[N][N],B[N][N],aim; bool who(int sta) { //判断该谁走的函数
int p=m,ans=;
while(sta) {
if(sta&) {
ans+=p;
}
else {
p--;
}
sta=sta>>;
}
return !(ans&);
} void out(int sta) { //输出这个状态(二进制)
int t[],T=;
fill(t,t+,);
while(sta) {
t[++T] = bool(sta&);
sta=sta>>;
}
printf(" ");
for(int i=m+n;i>=;i--) {
printf("%d",t[i]);
}
printf(" ");
return;
} int DFS(int now) { ///printf("DFS\n"); if(mp[now]) { // 记忆化
return mp[now];
}
if(now==aim) {
return ;
} bool f = who(now);
int p=,ans=(f?(-INF):INF);
for(int i=;i<m+n;i++) {
if(now&(<<i)) {
p++;
} // gay
if((!(now&(<<i)))&&(now&(<<(i+)))) { /* 10 */ /** 10 */ /// [p+1][m+p-i]
int nextsta = (now|(<<i))&(~(<<(i+)));
int x=p+;
int y=m+p-i;
if(f) {
ans=max(ans,DFS(nextsta)+A[x][y]);
}
else {
ans=min(ans,DFS(nextsta)-B[x][y]);
}
}
}
mp[now]=ans;
//printf("DFS:");
//out(now);
//printf("\n");
return ans;
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) {
for(int j=;j<=m;j++) {
scanf("%d",&A[i][j]);
}
}
for(int i=;i<=n;i++) {
for(int j=;j<=m;j++) {
scanf("%d",&B[i][j]);
}
}
int s=; // 起点
for(int i=;i<=n;i++) {
aim=aim<<|; // 终点
s=s<<|;
}
for(int i=;i<=m;i++) {
s=s<<;
} printf("%d",DFS(s)); return ;
}

AC代码

洛谷P4363 一双木棋 chess的更多相关文章

  1. 洛谷P4363 一双木棋chess [九省联考2018] 搜索+hash

    正解:记搜+hash 解题报告: 传送门! 因为看到nm范围特别小,,,所以直接考虑爆搜(bushi 先考虑爆搜之后再想优化什么的嘛QwQ 首先对这种都要最优的,就可以直接把答案设为针对某一方,然后题 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. CLOUD计算产品成本嵌套

    1.产品入库单入库的半成品A (无单价) 2.其他出库单上(共耗的)出库的半成品A(无单价) 不管在同车间还是不同车间内都是认定为嵌套的,所以可以计算2遍成本,第1遍不考虑嵌套,第2遍就能计算进去了.

  2. MySQL 单个表锁死 对查询语句无响应

    这个时候应该怀疑读取都被加锁,应该尝试使用 show processlist 查看每一个正在运行的进程. 可以看到这样一个列表,里面有使用者即用户,正在使用数据库的 host, 使用的 db 目前的 ...

  3. systemd取消对服务重启的限制

    默认情况下,一个服务在10秒内最多允许启动5次.当超过5次后,会报如下错误: Job for xx.service failed because start of the service was at ...

  4. mktemp -t -d用法

    mktemp命令用于建立暂存文件或者文件夹,帮助文档如下: Usage: mktemp [OPTION]... [TEMPLATE] Create a temporary file or direct ...

  5. 日历插件bootstrap-datetimepicker的使用感悟

    首先队长先综述一下插件的使用三步流程:即 1.引入插件  2.使用jquery选择器选择目标标签  3.对目标标签绑定插件函数来触发插件 雷同于python中的库的使用(安装库 导入库 引用库) 下面 ...

  6. jqGrid选中行、格式化、自定义按钮、隐藏

    获取选择一行的id: var id=$('#jqGrid').jqGrid('getGridParam','selrow'); 获取选择多行的id: var ids=$('#jqGrid').jqGr ...

  7. springboot+jpa+mysql+redis+swagger整合步骤

    springboot+jpa+MySQL+swagger框架搭建好之上再整合redis: 在电脑上先安装redis: 一.在pom.xml中引入redis 二.在application.yml里配置r ...

  8. Hibernate 配置文件hibernate.cfg.xml的详细

    <!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式-->               <?xml ...

  9. 【理论】X理论、Y理论及Z理论

      道格拉斯·麦格雷戈(Douglas Mcgregor)把对人的基本假设作了区分,即X理论和Y理论.X理论认为:人们总是尽可能地逃避工作,不愿意承担责任,因此要想有效地进行管理,实现组织的目标,就必 ...

  10. Jenkins+PowerShell持续集成环境搭建(三)Web项目

    1. 新建一个名字为HelloWorld.Web的Freesyle项目: 2. 配置源码管理: 3. 编译配置: 版本:选择MSBuild4 文件:D:\CI\Config\HelloWorld.We ...