出处http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove首先当然要献上一些非常好的学习资料:基础博弈的小结:http://blog.csdn.net/acm_cxlove/article/details/7854530经典翻硬币游...
分类:
其他好文 时间:
2014-07-19 11:32:15
阅读次数:
226
UVA 11892 - ENimEN
题目链接
题意:给定n堆石头,两人轮流取,每次只能取1堆的1到多个,如果上一个人取了一堆没取完,那么下一个人必须继续取这堆,取到最后一个石头的赢,问谁赢
思路:简单推理一下,后手只可能在堆数偶数并且都是1的情况下才可能赢
代码:
#include
#include
const int N = 20005;
int t, n,...
分类:
其他好文 时间:
2014-07-18 22:35:48
阅读次数:
197
UVA 11534 - Say Goodbye to Tic-Tac-Toe
题目链接
题意:给定一个序列,轮流放XO,要求不能有连续的XX或OO,最后一个放的人赢,问谁赢
思路:sg函数,每一段...看成一个子游戏,利用记忆化求sg值,记忆化的状态要记录下左边和右边是X还是O即可
代码:
#include
#include
const int N = 105;...
分类:
数据库 时间:
2014-07-18 22:34:57
阅读次数:
434
题目链接:点击打开链接
题意:
给定 a个箱子 b个球 常数n (球和箱子都是各不相同的,不会出现有一样的物品)
设 way = 把b个球放到a个箱子中的方法数, 若way >= n则游戏结束
有2个人玩游戏。
若当前轮到 X时
1、 X选择增加一个箱子或增加一个球
2、若增加完后方法数>=n 则X失败
若先手必胜,则输出 Masha ,若先手必败则输出 Stas ,若为平局则输出...
分类:
其他好文 时间:
2014-07-18 22:31:42
阅读次数:
282
UVA 12293 - Box Game
题目链接
题意:两个盒子,一开始一个盒子有n个球,一个只有1个球,每次把球少的盒子中球消掉,把多的拿一些球给这个盒子,最后不能操作的输(球不能少于1个),Alice先手,问谁赢
思路:博弈,题目其实可以转化为,给定一个n,每次把减少1到n/2的数字,最后谁是1谁就输了,那么可以去递推前几项找个规律,或者推理,都可以发现只要是2^i - 1...
分类:
其他好文 时间:
2014-07-18 21:27:44
阅读次数:
186
UVA 847 - A Multiplication Game
题目链接
题意:一个数一开始是1,每次轮流乘2-9,谁先大于n谁就赢,问谁胜
思路:博弈,找出必胜态,2-9为stan,10-18为ollie,19-162为stan...发现都是乘2乘9交替
代码:
#include
#include
#include
long long n;
bool ju...
分类:
其他好文 时间:
2014-07-18 21:27:15
阅读次数:
194
UVA 1557 - Calendar Game
题目链接
题意:给定一个日期,两个人轮流走,每次可以走一月或者一天,问最后谁能走到2001.11.4这个日子
思路:记忆化搜索,对于每个日期,如果下两个状态有一个非必胜态,那么这个状态是必胜态,如果后继状态都是必胜态,那么该状态为必败态
代码:
#include
#include
const int day[13...
分类:
其他好文 时间:
2014-07-18 21:21:24
阅读次数:
184
【题目描述】 首长NOI惨跪,于是去念文化课了。现在,他面对一道化学题。 这题的来源是因为在一个奇怪的学校两个化竞党在玩一个奇怪的博弈论游戏,这个游戏很蛋疼,我相信你们也没有兴趣听。 由于这个游戏涉及博弈论,因此化竞的同学就要求首长求一个类似SG函数的值。 他们手中有一种非常神奇的化合物,它...
分类:
Web程序 时间:
2014-07-18 16:07:59
阅读次数:
348
题目链接:http://code.bupt.edu.cn/problem/p/427/
一个很单纯的every-sg模型
代码:
#include
#include
#include
#include
#define N 100010
using namespace std;
int step[N];
int sg[N];
int stone[N];
vector g[N];
i...
分类:
其他好文 时间:
2014-07-18 11:34:05
阅读次数:
173
题解:简单博弈论#include int main(){ int n; while(scanf("%d",&n),n!=0) if (n&1) puts("Bob"); else puts("Alice"); return 0;}
分类:
其他好文 时间:
2014-07-17 10:01:29
阅读次数:
259