洛谷P4363 一双木棋 chess
洛谷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的更多相关文章
- 洛谷P4363 一双木棋chess [九省联考2018] 搜索+hash
正解:记搜+hash 解题报告: 传送门! 因为看到nm范围特别小,,,所以直接考虑爆搜(bushi 先考虑爆搜之后再想优化什么的嘛QwQ 首先对这种都要最优的,就可以直接把答案设为针对某一方,然后题 ...
- 洛谷 P4363 [九省联考2018]一双木棋chess 解题报告
P4363 [九省联考2018]一双木棋chess 题目描述 菲菲和牛牛在一块\(n\)行\(m\)列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落 ...
- BZOJ.5248.[九省联考2018]一双木棋chess(对抗搜索 记忆化)
BZOJ 洛谷P4363 [Update] 19.2.9 重做了遍,感觉之前写的有点扯= = 首先棋子的放置情况是阶梯状的. 其次,无论已经放棋子的格子上哪些是黑棋子哪些是白棋子,之前得分如何,两人在 ...
- [九省联考2018]一双木棋chess——搜索+哈希
题目:bzoj5248 https://www.lydsy.com/JudgeOnline/problem.php?id=5248 洛谷P4363 https://www.luogu.org/prob ...
- 洛谷P4363 [九省联考2018]一双木棋chess 【状压dp】
题目 菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束. 落子的规则是:一个格子可以落子当且仅当这个 ...
- 洛谷 P4363 [九省联考2018]一双木棋chess 题解
题目链接:https://www.luogu.org/problemnew/show/P4363 分析: 首先博弈,然后考虑棋盘的规则,因为一个子在落下时它的上面和左面都已经没有空位了,所以棋子的右下 ...
- 【题解】Luogu P4363 [九省联考2018]一双木棋chess
原题传送门 这道题珂以轮廓线dp解决 经过推导,我们珂以发现下一行的棋子比上一行的棋子少(或等于),而且每一行中的棋子都是从左向右依次排列(从头开始,中间没有空隙) 所以每下完一步棋,棋盘的一部分是有 ...
- luogu P4363 [九省联考2018]一双木棋chess
传送门 对抗搜索都不会,我真是菜死了qwq 首先根据题目条件,可以发现从上到下每一行的棋子数是单调不增的,然后n m都比较小,如果把状态搜出来,可以发现合法状态并不多,所以可以用一个11进制数表示状态 ...
- P4363 [九省联考2018]一双木棋chess
思路 容易发现只能在轮廓线的拐点处落子,所以棋盘的状态可以用一个n+m长度的二进制数表示 转移就是10变成01 代码 #include <cstdio> #include <algo ...
随机推荐
- 为什么js中要用void 0 代替undefined
这个是Backbone.js中的一句源码 if (callback !== void 0 && 'context' in opts && opts.context == ...
- python爬虫之scrapy安装(一)
简介: Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrap ...
- Python深入类和对象
一. 鸭子类型和多态 1.什么是鸭子类型: 在程序设计中,鸭子类型(英语:Duck typing)是动态类型和某些静态语言的一种对象推断风格."鸭子类型"像多态一样工作,但是没有继 ...
- 库存盘点打印功能生成PDF速度太慢使用页面缓存
一.业务需求 二.产品设计 三.UI设计 四.程序设计 1.使用behavior配置页面缓存 class WmsCheckController extends Controller { /** * @ ...
- 解析xml文件 selectSingleNode取不到节点
今天在做批量生成XML的时候,碰到一个情况 解析xml文件 selectSingleNode一直返回NULL. XML的格式开头有一句这个<CE401Message xmlns="ht ...
- 【python练习题】程序15
#题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. n = input('请输入成绩 :') n = int(n) if ...
- BZOJ2281[Sdoi2011]黑白棋&BZOJ4550小奇的博弈——DP+nimk游戏
题目描述 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同. 小A可以移动白色 ...
- Windows server 2012 卸载iis 黑屏
转载:https://jingyan.baidu.com/article/ff42efa9fb6f16c19e2202dc.html 1 按 ctrl+alt+end 键,新建运行任务 ,输入cmd ...
- Matplotlib学习---用matplotlib画阶梯图(step plot)
这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/us-postage.c ...
- django 配置邮件发送 send_email
导入 send_email 所用方法导入 from django.core.mail import send_mail 因为使用的需要指明 发送人 所以要把 setting.py 中的 EMAIL_F ...