博弈论
博弈论
gongyuandaye
不要再问我会不会写可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP了。
展开
-
HDU 6850 Game (博弈+dp)
题意:n个点,起初石子在第一个点,Dodo 和 ddd 轮流移动石子到一个从未访问过的点,且每次移动的距离必须大于前一段的距离,两人采取最优策略,求Dodo是否必胜。题解:博弈+dpdp[x][y]dp[x][y]dp[x][y]:x到y这条边是否为必胜态。若该状态是必胜态,那么从y到任意点的边所代表的状态都是必败态。由此,我们记忆化搜索即可。但是还有一个问题,就是我们在dfs的时候并没有考虑访问的点之前是否已经访问过,其实这是可以忽略的,因为距离递增,最终必然确定一个状态,由此就可以推得前驱状态了原创 2020-09-16 22:22:15 · 128 阅读 · 0 评论 -
POJ 1740 A New Stone Game (博弈)
题意:对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余石子的一部分分给其它的某些堆。最后谁无子可取即输。题解:博弈对于两堆相等的情况,后手是必赢的,因为后手永远可以做与先手相对称的操作。我们可以先排序,遍历两两相邻石子堆,若都相等则后手必赢。对于不满足上述情况的,先手必赢,类似巴什博弈,我们只要操作石子数量最多的堆,使得其他堆两两相等即可,对于偶数堆保留该堆,对于奇数堆该堆置0。#define _CRT_SECURE_NO_WARNIN原创 2020-07-16 11:18:46 · 162 阅读 · 0 评论 -
HDU 4203 Doubloon Game (博弈+sg打表)
题意:在有一堆石子,石头数量为s个,每个人只能取{1, k, k^2, k^3…}的石子,谁不能取石子的时候就输了。求最小的a,使得拿走a个后仍能必胜,若不能,输出0。题解:博弈+sg打表可以直接用sg函数做,但是石头有1e9个,我们先用sg打表找规律。//f[N]:可改变当前状态的方式,N为方式的种类,f[N]要在getSG之前先预处理//SG[]:0~n的SG函数值//S[]:为x后继状态的集合const int N = 100;const int MAXN = 1000;int f[N原创 2020-07-15 17:41:15 · 216 阅读 · 0 评论 -
HDU 1851 A Simple Game (巴什+尼姆博弈)
题意:n堆物品,给出每堆的数量以及可以拿的上限,拿走最后物品的取胜。题解:巴什+尼姆博弈尼姆博弈: 有n堆物品,两人轮流取,每次取某堆中不少于1个,最后取完者胜。对于一堆物品,其实就是巴什博弈,即只跟余数有关,之后就是尼姆博弈了,将余数异或即可,为0先手必输。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring原创 2020-07-15 15:03:44 · 180 阅读 · 0 评论 -
HDU 2897 邂逅明下 (巴什博弈变形)
题意:三个数字n,p,q,表示一堆硬币一共有n枚,从这个硬币堆里取硬币,一次最少取p枚,最多q枚,如果剩下少于p枚就要一次取完。两人轮流取,直到堆里的硬币取完,最后一次取硬币的算输。题解:巴什博弈变形巴什博弈:一堆n个物品,两个人轮流从中取出1~m个,最后取光者胜(不能继续取的人输)。同余定理:n=k∗(m+1)+r,先者拿走r个,那么后者无论拿走1-m个,先者只要的数目使和为m+1,那么先手必赢。反之若n=k∗(m+1),那么先手无论怎样都会输。这题是巴什博弈的变形,最后取的人算输。把1改成p,m原创 2020-07-15 11:30:42 · 251 阅读 · 0 评论 -
HDU 2147 kiki‘s game (博弈+规律)
题意:n*m的方格,走过的格子不能走,一开始在角落上,最后无路可走就算输,求最后谁赢。题解:奇偶博弈nm若为偶数,那么剩余可走步数为nm-1,为奇数,那么先手必赢;反之后手必赢。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<原创 2020-07-15 10:43:21 · 163 阅读 · 0 评论 -
HDU 1564 Play a game (奇偶博弈)
题意:n*n的方格,走过的格子不能走,一开始在角落上,最后无路可走就算输,求最后谁赢。题解:奇偶博弈n若为偶数,那么剩余可走步数为n*n-1,为奇数,那么先手必赢;反之后手必赢。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<原创 2020-07-15 10:36:23 · 245 阅读 · 0 评论 -
HDU 1525 Euclid‘s Game (博弈)
题意:给出了两个正数a,b。每次操作,大的数减掉小的数的整数倍。一个数变为0 的时候结束。谁先把其中一个数减为0的获胜。Stan是先手。题解:博弈我们把a看作较大的数,把b看作较小的数。若a == b,那么先手必胜。若a % b == 0,那么先手也必胜。若a ≥ 2 * b,那么最终会到达的状态是<a%b, b>。若该状态为必胜态,那么先手将其变为<a%b + b, b>,后手只能将其变为<a%b, b>,这对先手是必胜态;若该状态为必败态,那么先手直接将其变原创 2020-07-14 22:11:06 · 135 阅读 · 0 评论 -
HDU 1517 A Multiplication Game (博弈+规律)
题意:p开始为1,然后两个人轮流选择2~9与p相乘,所得的值赋给p,谁先使p>=n谁赢,Stan先。题解:博弈+规律2 - 9:9 先手胜10 - 18:2 * 9 后手胜19 - 162:9 * 2 * 9 先手胜163 - 324:2 * 9 * 2 * 9 后手胜我们只要把n不断的除以18,看最后剩下的,若≤9,先手为必胜态,反之后手必胜。由于n不一定为18倍数,我们将n设为double。#define _CRT_SECURE_NO_WARNINGS#include<io原创 2020-07-14 21:28:47 · 114 阅读 · 0 评论