[九省联考2018]一双木棋chess——搜索+哈希
题目:bzoj5248 https://www.lydsy.com/JudgeOnline/problem.php?id=5248
洛谷P4363 https://www.luogu.org/problemnew/show/P4363
终于A了(虽然得开O2才能过)!
其实就是暴搜,用一个 n+1 进制数表示状态,进行最优策略转移即可;
注意 cnt[] 如果开成全局变量就不能每次翻译那个 n+1 进制数,否则会影响其它层的搜索;
(还有一种神奇的状态压缩是有几个用了 k 个1的列,就在第 k 个0后面加几个1……)
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<map> using namespace std; typedef long long ll; map<ll,ll>mp; map<ll,bool>vis; int n,m,s[3][15][15],inf=1e9,cnt[15]; ll pw(int a,int b) {ll ret=1;while(b){if(b&1)ret*=a;a*=a;b>>=1;}return ret; } ll dfs(ll x,bool f) {if(vis[x])return mp[x];vis[x]=1;mp[x]=-inf;ll tx=x; // for(int i=m;i;i--)cnt[i]=tx%(n+1),tx/=(n+1);if(cnt[m]==n)return mp[x]=0;for(int i=1;i<=m;i++){if(cnt[i]==n||(i>1&&cnt[i-1]<=cnt[i]))continue;cnt[i]++;ll y=x+pw(n+1,m-i);mp[x]=max(mp[x],s[f][cnt[i]][i]-dfs(y,!f));cnt[i]--;}return mp[x]; } int main() {scanf("%d%d",&n,&m);for(int k=0;k<=1;k++)for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&s[k][i][j]);printf("%lld",dfs(0,0)); }
转载于:https://www.cnblogs.com/Zinn/p/9164001.html
[九省联考2018]一双木棋chess——搜索+哈希相关推荐
- 「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess
「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess 学校省选模拟居然拿九省联考来考 然而我还是\(too\space young\),搞不懂什么叫最优 让二者的答案最接近可 ...
- 【洛谷】【博弈搜索】P4363 [九省联考2018]一双木棋chess
洛谷 P4363 [九省联考2018]一双木棋chess 题目大意 ◇题目传送门◆ 分析 根据题目所给定的规则,可以发现对于每一行,其下面一行上放的棋子数目不可能多于上面的一行. 所以我们可以将每行上 ...
- p4363 [九省联考2018]一双木棋chess
传送门 分析 我们用0表示向右,1表示向上 于是可以得到一条江棋盘分为两块的线 直接dp即可 代码 #include<iostream> #include<cstdio> #i ...
- [LUOGU] P4363 [九省联考2018]一双木棋chess
题目描述 菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束.落子的规则是:一个格子可以落子当且仅当这 ...
- luogu P4363 [九省联考2018]一双木棋chess
analysis 这是一道很好的状压dp 这个题首先需要分析出任何一个合法的状态都可以化为从左下角到右上角的一条对角线 这样一来状态就很好表示了: 我们考虑设f[s]表示从状态s出发,最后先手减后手的 ...
- [九省联考2018]一双木棋chess
题目 题目描述 菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束. 落子的规则是:一个格子可以落子当 ...
- [九省联考 2018] 一双木棋chess
题目描述: 有一个 n∗m的方格, Alice 和 Bob 玩游戏.每次每人可以选择一个格子占领,前提是这个格子未被占领且它左上方的所有格子都已被占领. 第 i行第 j 列的格子若被 Alice 占领 ...
- 洛谷P4363 [九省联考2018]一双木棋chess
题目描述 菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束. 落子的规则是:一个格子可以落子当且仅当 ...
- 洛谷 P4363 [九省联考2018]一双木棋chess 题解
题目链接:https://www.luogu.org/problemnew/show/P4363 分析: 首先博弈,然后考虑棋盘的规则,因为一个子在落下时它的上面和左面都已经没有空位了,所以棋子的右下 ...
最新文章
- OC动态创建的问题变量数组.有数组,在阵列13要素,第一个数据包阵列,每3元素为一组,分成若干组,这些数据包的统一管理。最后,一个数组.(要动态地创建一个数组).两种方法...
- 年度编程语言最佳候选人:Kotlin vs. C
- 服务器删除网站文章,如何一次性删除wordpress所有文章
- Python中的WSGI
- 更新mac系统中homebrew的源,更改为清华大学的源
- 用数据来证明累计充值赠送活动
- 注解之RetentionPolicy,ElementType
- 2440 6.0BSP 移植过程之显示驱动篇
- Flash动作补间动画
- Linux下编译hiredis
- css3实现奔跑的小人动画
- 再迎顶尖科学家,百度研究院为何如此吸引大师级AI人才?
- 别扔掉你的登机牌,黑客可以用它获取个人信息
- 计算机显示不支持此接口,为什么会提示“不支持此接口”?提示不支持此接口的解决方法...
- 思维导图使用技巧:手把手教你怎么画思维导图 #CSDN博文精选# #系统化学习# #IT技术# #知识图谱#
- 【已解决】mac monterey重装系统 pkdownloaderror错误8 报错
- python 计算快递费
- ACP敏捷9.敏捷应用场景
- 以图搜图新体验:图片谷歌和百度识图
- java后台Controller下载文件方法