博弈论
DZYO
Never stop
展开
-
poj2068:NIM(记忆化搜索)
传送门题意: 团体尼姆赛:传统的尼姆游戏由两名玩家进行,在一堆石头中,双方轮流取走任意合法数量块石头,取走最后一块石头的玩家落败。多人尼姆游戏将参赛人数拓展至两个队伍,每支队伍有n名队员交错入座,单次分别能最多取走Mi块石头,取走S块石头中的最后一块的队伍失败,求第一支队伍是否有必胜策略?题解: 记忆化搜索。 记dp[i][j]dp[i][j]表示第ii个人在还有jj块石头时的胜负情况。 那原创 2017-09-13 13:01:37 · 333 阅读 · 0 评论 -
NOIP模拟:分玩具(博弈论)
豆豆和豆沙正在分一些玩具,每个玩具有一个好玩值,每个人可以拿走任意数量的玩具,获得的愉快度为最小的好玩值。现在豆豆先拿,每个人轮流操作,直到没有玩具可以拿。豆豆想知道他能比豆沙多出多少愉快度?题解: 首先题意可以转化为一个有序数组分成n段分别加减加减依次进行,然后考虑dp,因为要满足最优子结构,所以从前往后用dp[i]dp[i]表示从i开始最大贡献,每次dp减去前面最小的(因为两个人都很聪明)。原创 2017-10-11 15:24:23 · 489 阅读 · 1 评论 -
poj1067:取石子游戏(Betty定理)
传送门题意: 有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。题解:好题啊。。首先我们用(a,b)(a≤b)(a,b)(a\le b)表示一个状态,那么原创 2017-12-22 10:21:25 · 607 阅读 · 0 评论 -
poj1704:Georgia and Bob(阶梯NIM)
传送门题意: 从左到右有一排石子,给出石子所在的位置。规定每个石子只能向左移动,且不能跨过前面的石子。最左边的石子最多只能移动到1位置。每次选择一个石子按规则向左移动,问先手是否能赢。题解: 把相邻石子之间的空位看做一个阶梯就转化为阶梯NIM了。关于阶梯NIM,显然奇数位没有用,对偶数位异或即可。#include<iostream>#include<cstdio>#include<cstdl原创 2017-12-22 11:09:03 · 233 阅读 · 0 评论 -
SG函数入门
必胜局面和必败局面如果一个局面SS先手必胜,则称SS为必胜局面,如果后手必胜,则称S为必败局面。几个定理1.对于一个必胜局面SS,存在一种操作使得其转化为必败局面。 2.对于一个必败局面SS,任何一种操作都使得其转化为必胜局面。 3.局面SS可以分解为两个子局面S1,S2S_1,S_2,且: - 若S1S_1必败,S2S_2必败,则SS必败。 - 若S1S_1必胜,S2S_2必败,则SS必败原创 2017-12-21 10:55:50 · 271 阅读 · 0 评论 -
BZOJ2437:兔兔与蛋蛋(二分图博弈)
传送门题解: 将原图黑白染色,相邻且颜色不同的格子连边,原问题则变为诸如:给定二分图和起点,每次可移动一步,不能走走过的地方,谁不能移动谁就输的博弈问题。很显然,先手必胜当且仅当起点为最大匹配的必须点。否则考虑一个不经过起点的最大匹配,后手只需要每次走匹配边即可。#include <bits/stdc++.h>using namespace std;typedef...原创 2018-04-09 20:05:35 · 206 阅读 · 0 评论 -
Codeforces 1037G:A Game on Strings(SG函数)
传送门题解:直接暴力SG函数求解即可。 可以证明有用区间只有O(26n)O(26 n)O(26n)个。#include <bits/stdc++.h>using namespace std;const int RLEN=1<<18|1;inline char nc() { static char ibuf[RLEN],*ib,*ob; (ib==ob) &...原创 2018-09-17 19:04:03 · 651 阅读 · 0 评论