Description   小明和小红经常玩一个博弈游戏.给定一个n×n的棋盘,一个石头被放在棋盘的左上角.他们轮流移动石头.每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移动到的格子之前不能被访问过.谁不能移动石头了就算输.假如小明先移动石头,而且两个选手都以最优策略走步,问最后谁能赢?   Input     输入文件有多组数据.     输入第一行包含一个整数n,表示棋盘的规模.     当输入n为0时,表示输入结束.   Output 对于每组数据,如果小明最后能赢,…
我们通过观察可以发现,当n为偶数时,一定可以转化为一种先手必胜态,即棋盘可以被骨牌所覆盖, 如果n是奇数,那么去掉一格后一定能被1*2的骨牌覆盖,但是先手从左上角走,就进入了这个S态(必胜态),那么和上边的分析一样了,因此先手必败. #include <bits/stdc++.h> using namespace std; int main() { int n; while (scanf("%d", &n) == 1 && n != 0) { if…
一些题库: bzoj.uoj.luogu(洛谷).CF.loj.hdu.poj.51nod 下面是一些近期的做题记录 省选爆炸-然后大概就先这样了,要回去读一段时间文化课,如果文化课还不错的话也许还会回来- 2020.9.3 这篇停更了吧x过几天开个新的 2018.2.25 ·[bzoj1257]余数之和-数学(根号求和) ·[loj6006]「网络流 24 题」试题库-最大流 ·[bzoj1001]狼抓兔子-最大流最小割 ·[poj3422]Kaka's Matrix Travels-拆点+最…
题目链接 http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2220 题目 Description Leha somehow found an array consisting of n integers. Looking at it, he came up with a task. Two players play the game on the array. Players move one by one. The first…
还有一天就结束了..QWQ 好快啊. 昨天没讲完的博弈论DP: 一个标准的博弈论dp,一般问的是是否先手赢. 博弈论最关键的问题:dp过程. 对于一个问题,一定有很多状态,每个状态可以转移到其他的一些状态.如果存在一个状态,且不能转移到其他状态,那么我们设这个状态为必败态,那么他相邻的能够转移到必败态的状态因为只有一种转移方式,那么一定为必胜态,(假设操作双方选手绝顶聪明,每一步都朝着最优状态走),如此这样交替下去,推到开始状态,就可以判断了. 怎么转换? 对于一个节点以及他所有子节点来讲,如果…
[BZOJ2463]谁能赢呢?(博弈论) 题面 BZOJ 洛谷 题解 洛谷上对于难度的评级我总觉有些问题. 很多人按照代码难度而并非思维难度在评级,导致很多评级很不合理啊... 不说废话了.. 对于一个\(n*n\)的棋盘,我们可以考虑用\(1\times 2\)的骨牌来进行覆盖. 显然对于\(n\)为奇数不能覆盖满,\(n\)为偶数能够覆盖满. 那么对于偶数局面,我们出发点一定是一个骨牌的一端,那么无论先手只需要移动到骨牌的另外一端去就好了,对于后手而言,因为不能回头,所以必定会走到一个新的骨…
博弈论 bzoj-2463 中山市选-2009 题目大意:题目链接. 注释:略. 想法: 如果$n$是偶数的话就可以被多米诺骨牌恰好覆盖,这样的话只需要先手先走向(1,1)对应的第二段,后者必定会将棋子移动到多米诺骨牌的第一段.故先手必胜. 反之同理. Code: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std;…
题目描述 小明和小红经常玩一个博弈游戏.给定一个n×n的棋盘,一个石头被放在棋盘的左上角.他们轮流移动石头.每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移动到的格子之前不能被访问过.谁不能移动石头了就算输.假如小明先移动石头,而且两个选手都以最优策略走步,问最后谁能赢? 输入     输入文件有多组数据.     输入第一行包含一个整数n,表示棋盘的规模.     当输入n为0时,表示输入结束. 输出 对于每组数据,如果小明最后能赢,则输出”Alice”, 否则输出”Bob…
∵都是最优操作 ∴n*n=偶数时Bob赢,否则Alice赢 n*n的奇偶性等价于n的奇偶性. #include<cstdio> using namespace std; int n; int main() { ) { scanf("%d",&n); if(!n) break; puts((n&) ? "Bob" : "Alice"); } ; }…
2463: [中山市选2009]谁能赢呢? 题目:传送门 题解: 水体! n为偶数的话必能被1*2的矩形覆盖,那么因为一开始在左上角,所以先手一定可以先组成一个矩形,那么先手肯定必胜! n为奇数和上面相反,先手必输 代码: #include<cstdio> #include<cstring> using namespace std; int main() { int n; while(scanf("%d",&n)!=EOF) { )break; )pri…