九省联考2018 D1T1 一双木棋
Alice和Bob轮流在n*m的棋盘上放棋子
a[i][j]表示Alice放在这的收益,b[i][j]表示Bob放在这的收益
一个地方没有棋子且它的左边上边都有棋子才能放棋子,边界外视为有一圈棋子
n,m<=10,求两人都用最优方案时,Alice可以赢多少
sol:上次用的轮廓线dp,现在已然不会写了...真是个sb
写了上次口胡出来的方法,考虑棋子放出来的形状,显然,每行棋子小于等于上一行放的棋子
那状态也不多嘛,可以哈希出来然后对抗搜索
mask[i]表示第i行已经放了多少棋子
对抗搜索的时候,每一步更换游戏者,游戏者A要让ret尽量大,游戏者B要让ret尽量小
不卡自然溢出好评
#include<bits/stdc++.h> #define LL unsigned long long using namespace std; inline LL read() {LL x = 0,f = 1;char ch = getchar();for(;!isdigit(ch);ch = getchar())if(ch == '-')f = -f;for(;isdigit(ch);ch = getchar())x = 10 * x + ch - '0';return x * f; } int n,m; int a[2][15][15]; int mask[15]; map<LL,int> hsh; const LL base = 137; inline LL getmask() {LL ans = 0;for(int i=1;i<=n;i++)ans = ans * base + mask[i];return ans; } inline int dfs(LL curmask,int opt) {if(hsh.count(curmask))return hsh[curmask];int ret = opt ? 1e9 : -1e9;for(int i=1;i<=n;i++)if(mask[i] + 1 <= mask[i - 1]){mask[i]++;if(opt)ret = min(ret,dfs(getmask(),opt ^ 1) - a[1][i][mask[i]]);else ret = max(ret,dfs(getmask(),opt ^ 1) + a[0][i][mask[i]]);mask[i]--;}return hsh[curmask] = ret; } int main() {n = read(),m = read();for(int k=0;k<=1;k++)for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[k][i][j] = read();for(int i=1;i<=n;i++)mask[i] = m;hsh[getmask()] = 0;memset(mask,0,sizeof(mask));mask[0] = m;cout<<dfs(getmask(),0); }
View Code
转载于:https://www.cnblogs.com/Kong-Ruo/p/9760029.html
九省联考2018 D1T1 一双木棋相关推荐
- 「九省联考 2018」一双木棋
「九省联考 2018」一双木棋 题目描述 菲菲和牛牛在一块 \(n\) 行 \(m\) 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满 ...
- [博弈] LOJ#2471. 「九省联考 2018」一双木棋
考虑暴力. 每次枚举放哪个位置,设已经放了棋子的位置集合为 SSS,fS" role="presentation">fSfSf_S 表示当前放置情况为 SSS 时, ...
- 【九省联考 2018】 一双木棋 chess
题目描述 菲菲和牛牛在一块 nnn 行 mmm 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束. 落子的规则是:一个格子可以 ...
- 【九省联考2018】一双木棋
题面 https://www.luogu.org/problem/P4363 题解 很套路的$hash$状态$+dp$. 可知棋子形成的形状一定是一个连续的倒楼梯形(楼梯向右延伸的长度可以不连续,但一 ...
- 「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess
「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess 学校省选模拟居然拿九省联考来考 然而我还是\(too\space young\),搞不懂什么叫最优 让二者的答案最接近可 ...
- 【洛谷】【博弈搜索】P4363 [九省联考2018]一双木棋chess
洛谷 P4363 [九省联考2018]一双木棋chess 题目大意 ◇题目传送门◆ 分析 根据题目所给定的规则,可以发现对于每一行,其下面一行上放的棋子数目不可能多于上面的一行. 所以我们可以将每行上 ...
- 九省联考2018总结
前言 我作为一名ZJOI2018day1凉凉选手,为获得更多的省选体验,去上海参加了九省联考2018,当然,是属于外省选手参加的(所以实际并测的时候出现了一些问题也得不到解决),做完两天的题,深有感触 ...
- p4363 [九省联考2018]一双木棋chess
传送门 分析 我们用0表示向右,1表示向上 于是可以得到一条江棋盘分为两块的线 直接dp即可 代码 #include<iostream> #include<cstdio> #i ...
- 一双木棋chess[九省联考2018]
题目传送门 题目描述 菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束. 落子的规则是:一个格子可以 ...
最新文章
- 企业怎样管理员工才会更有效?
- elasticsearch v6.5.4配置
- Windows To Ghost系统封装之必备软件集 - 好压
- 生成awr报告时报ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
- 力扣112. 路径总和(JavaScript)
- TCP/IP参考模型、五层参考模型
- 合肥师范学院2020年专业计算机是多少分,合肥师范学院2020年安徽省一本、二本各专业录取分数统计...
- 法勒二维码读头数据读写测试
- Ceph新建monitor或者osd报错:use --overwrite-conf to overwrite
- ThreadLocal使用场景
- 开始防破解--该死的杀毒软件
- 2021年美容师(高级)考试及美容师(高级)考试题
- sql简介香气和sql简介_香气和SQL简介
- 和女友一起学技术,她去了字节,我去了华为
- 计算机控制面板包含的管理类别有什么,如何设置控制面板分类
- springboot整合阿里云视频点播服务Vod——实现视频上传、删除、播放
- redis的zset为什么用跳表不用红黑树
- 互联网快讯:中国石化与隆基达成战略合作;极米多款投影产品持续热销;百度网盘青春版正式上线
- Matplotlib多子图绘图后保存单个子图
- 【区块链论文整理】ICDE 篇
热门文章
- jzoj P1592 音乐节拍
- OCR技术简介——人工智能爆发前的技术
- Vue 导出Excel表格,并实现合并单元格方法
- python来写打飞机
- 自然语言处理(NLP)简介
- 图隐私论文速递:A graph modification approach for k‑anonymity in social networks using the genetic algorith
- 【Python】pandas获取全省人口数据并作可视化分析
- 随心所语之容器(C++ Container)
- 力谱宿云秦鹏:MaxLeap云服务基础架构演进之路-CSDN公开课-专题视频课程
- TCP协议中的核心知识点,SYN Flood?ISN?滑动窗口?数据重传?拆包粘包?单tcp连接多请求?拥塞管理?(个人收藏学习笔记)