随笔分类 - 博弈论
摘要:题目链接:https://vjudge.net/problem/Gym-102361K 题意:两个人轮流取树叶,最后没有树叶取的人输。 思路:求出所有树叶所在链的长度即可,如果都为偶数先手必败,否则先手必胜。 1 #include <bits/stdc++.h> 2 #include <time.h
阅读全文
摘要:题目链接:https://vjudge.net/problem/HDU-3980 题意:由n个石头组成的环,每次只能取连续的M个,最后不能取得人输。 思路:这样就可以先把它变成链,然后在链上枚举取m个连续点,每次都可以将这条链分成两部分,相当于两个子游戏。对于一个链,一共有n-m-i个子游戏对,用v
阅读全文
摘要:题目链接:https://vjudge.net/problem/HDU-2999 题意:有N堆石头,两个人交替取,每次只能取连续的k个石子,最后没有石子取得人输。 思路:如果我们每次取靠边的k个,那么转移方程就是sg[i-x],再模拟mex{}即可,如果取得是中间的那么就有可以分成几堆处理了。 1
阅读全文
摘要:1 //f[N]:可改变当前状态的方式,N为方式的种类,f[N]要在getSG之前先预处理 2 //SG[]:0~n的SG函数值 3 //S[]:为x后继状态的集合 4 int f[N],SG[MAXN],S[MAXN]; 5 void getSG(int n){ 6 int i,j; 7 mems
阅读全文
摘要:题目链接:https://vjudge.net/problem/POJ-1740#author=0 题意:有n堆石子,每次你可以选一堆拿走任意数量的石子,而且你还可以选择从这一堆剩下石子中取任意数量石子分配给其他堆,最后拿走石子的人获胜。 思路:我们先考虑如果有两堆石子一样的情况下,后手只要跟着先手
阅读全文
摘要:题目链接:https://vjudge.net/problem/HDU-3032 题意:有n堆物品,你可以有两种操作1.每次拿一堆中任意数量(大于1)的物品;2.选一堆进行拆分(每一堆大于0)。拿到最后一个物品的人获胜。 思路:这题其实是尼姆游戏的变形,我们可以打表sg函数找规律发现,当x%4==0
阅读全文
摘要:题目: 题意:1-N个石子每次只能取连续的1-K个问输赢。(一开始以为只是个简简单单的巴什游戏,激动的提交了一发wr了,再读了一遍题才发现是只能取连续的) 题解:当n==0或者k==1&&n&1==1 后手才会赢,其他情况都是先手赢。 1 #include<bits/stdc++.h> 2 usin
阅读全文