201803-4 棋局评估 这题主要使用对抗搜索,也就是每一步寻找可以下棋的位置,通过在这一步下棋看最后会取的什么样的分数. #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<string> using namespace std; const int INF=0x3f3f3f3f; int map[3][3]; bool row(…
棋局评估 问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是“X”,Bob放的是“O”,Alice执先.当同一种棋子占据一行.一列或一条对角线的三个格子时,游戏结束,该种棋子的持有者获胜.当棋盘被填满的时候,游戏结束,双方平手. Alice设计了一种对棋局评分的方法: - 对于Alice已经获胜的局面,评估得分为(棋盘上的空格子数+1): - 对于Bob已经获胜的局面,评估得分为 -(棋盘上的空格子数+1): - 对于平局的局…
前言 在一些复杂的博弈论题目中,每一轮操作都可能有许多决策,于是就会形成一棵庞大的博弈树. 而有一些博弈论题没有什么规律,针对这样的问题,我们就需要用一些十分玄学的算法. 例如对抗搜索. 对抗搜索简介 一. 对抗搜索的适用范围 在博弈论题目中,如果决策双方的获胜条件是截然相反的,即一方要求得分越高越好,另一方要求得分越低越好,这时我们就可以用上对抗搜索算法. 二.对抗搜索的主要思想 对抗搜索的核心思想就是\(dfs\)遍历一遍博弈树. 不难想到,如果博弈树非常庞大,在不加优化的情况下,对抗搜索的…
一.原题 问题描述 试题编号: 201803-4 试题名称: 棋局评估 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是“X”,Bob放的是“O”,Alice执先.当同一种棋子占据一行.一列或一条对角线的三个格子时,游戏结束,该种棋子的持有者获胜.当棋盘被填满的时候,游戏结束,双方平手. Alice设计了一种对棋局评分的方法: - 对于Alice已经获胜的局面,评…
博弈论极小极大搜索,记忆化+状压 #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<vector> using namespace std; ; ; ]; ]; ]; ]; void pre(){ three[]=; ;i<;i++){ three[i]=three[i-]*; }…
题目链接:Rake It In 比赛链接:ICPC Asia Nanning 2017 Description The designers have come up with a new simple game called "Rake It In". Two players, Alice and Bob, initially select an integer k and initialize a score indicator. An \(4 \times 4\) board is…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3106 对抗搜索,f[x][y][a][b][c][d]表示当前谁走,走了几步,及位置. (因为脑残+手残+眼拙写了一坨if还瞪了好久...最后还是这种做法靠谱... #include<cstring> #include<iostream> #include<algorithm> #include<cstdio> #define maxn 109 #def…
BZOJ 洛谷P4363 [Update] 19.2.9 重做了遍,感觉之前写的有点扯= = 首先棋子的放置情况是阶梯状的. 其次,无论已经放棋子的格子上哪些是黑棋子哪些是白棋子,之前得分如何,两人在剩下的棋盘上操作,结束时棋盘的状态也就是得分仍是确定的. (记忆化不和先前的得分有关系啊,想清楚.) 也就是我们可以记忆化.由上面的分析可知,我们只需要知道每一行现在放了多少个棋子了.事实上这种状态确实不是很多. 搜索的时候是个极大极小搜索,记先手与后手的得分差,先手会最大化这个差,后手会最小化这个…
点此看题面 大致题意: 在一张\(n*n\)的棋盘上有一枚黑棋子和一枚白棋子.白棋子先移动,然后是黑棋子.白棋子每次可以向上下左右四个方向中任一方向移动一步,黑棋子每次则可以向上下左右四个方向中任一方向移动一至二步.当某游戏者把自己的棋子移动到对方棋子所在的格子时,他就赢了.两个游戏者都很聪明,可以获胜时会尽快获胜,必输时会尽量拖延时间.试判断谁会赢,需要多少回合. 对抗搜索 这道题的做法应该是对抗搜索. 一波简单的分析 我们先来对题目进行一波简单的分析. 不难发现,因为黑棋每次能走的步数大于白…
传送门 这对抗搜索是个啥玩意儿…… 首先可以发现每一行的棋子数都不小于下一行,且局面可由每一行的棋子数唯一表示,那么用一个m+1进制数来表示当前局面,用longlong存,开map记忆化搜索 然后时间复杂度的问题,rqy这样说的 然后这个对抗搜索的话……个人理解就是因为要最大化分值的差,所以在一个人下棋的时候令他得分最大,另一个人得分最小 //minamoto #include<cstdio> #include<iostream> #include<map> #defi…