洛谷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. 为什么js中要用void 0 代替undefined

    这个是Backbone.js中的一句源码 if (callback !== void 0 && 'context' in opts && opts.context == ...

  2. python爬虫之scrapy安装(一)

    简介: Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrap ...

  3. Python深入类和对象

    一. 鸭子类型和多态 1.什么是鸭子类型: 在程序设计中,鸭子类型(英语:Duck typing)是动态类型和某些静态语言的一种对象推断风格."鸭子类型"像多态一样工作,但是没有继 ...

  4. 库存盘点打印功能生成PDF速度太慢使用页面缓存

    一.业务需求 二.产品设计 三.UI设计 四.程序设计 1.使用behavior配置页面缓存 class WmsCheckController extends Controller { /** * @ ...

  5. 解析xml文件 selectSingleNode取不到节点

    今天在做批量生成XML的时候,碰到一个情况 解析xml文件 selectSingleNode一直返回NULL. XML的格式开头有一句这个<CE401Message xmlns="ht ...

  6. 【python练习题】程序15

    #题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. n = input('请输入成绩 :') n = int(n) if ...

  7. BZOJ2281[Sdoi2011]黑白棋&BZOJ4550小奇的博弈——DP+nimk游戏

    题目描述 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小A可以移动白色 ...

  8. Windows server 2012 卸载iis 黑屏

    转载:https://jingyan.baidu.com/article/ff42efa9fb6f16c19e2202dc.html 1 按  ctrl+alt+end 键,新建运行任务 ,输入cmd ...

  9. Matplotlib学习---用matplotlib画阶梯图(step plot)

    这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/us-postage.c ...

  10. django 配置邮件发送 send_email

    导入 send_email 所用方法导入 from django.core.mail import send_mail 因为使用的需要指明 发送人 所以要把 setting.py 中的 EMAIL_F ...