UVA - 11892 ENimEN(博弈)】的更多相关文章

UVA 11892 - ENimEN 题目链接 题意:给定n堆石头.两人轮流取,每次仅仅能取1堆的1到多个.假设上一个人取了一堆没取完.那么下一个人必须继续取这堆.取到最后一个石头的赢,问谁赢 思路:简单推理一下.后手仅仅可能在堆数偶数而且都是1的情况下才可能赢 代码: #include <stdio.h> #include <string.h> const int N = 20005; int t, n, a[N]; bool judge() { if (n % 2) retur…
题目链接:uva 11892 - ENimEN 题目大意:给定n堆石子的个数,两人轮流选择石子堆取石子,直到不能取为失败,附加条件,假设前一次操作,即队手的操作,没有将选中石子堆中的石子取完,那么当前操作者必须在该堆中取石子. 解题思路:仅仅要有一个石子堆的个数大于2,那么先手就获得必胜态,可控.对于全是1的情况推断奇偶性. #include <cstdio> #include <cstring> #include <algorithm> using namespace…
题意:有n堆石子,两个人拿,拿走最后的石子的人赢,poopi先拿,条件是,每个人必须从另外一个人最后拿过的石子堆中取石子,若那堆石子被拿没了,才可以自由地拿其他堆.要求每次拿的石子数不能为0.问谁赢. 分析: 1.若每堆石子个数都为1,很显然谁赢只取决于n.2.(1)若石子堆中有奇数堆石子个数为1,如5 2 1 3 1 9 6 1则先手poopi只需要每次先从个数不为1的石子堆中拿,并且一下拿走(该石子堆个数-1)个,另一个人只能拿走该石子堆剩下的最后一个石子.如此反复,拿完所有个数不为1的石子…
经典博弈区间DP 题目链接:https://uva.onlinejudge.org/external/108/p10891.pdf 题意: 给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能从一端选取. 并且A B都尽力使自己选择的结果为最大的,可以理解成A B每一步走的都是最优的. 如果A先选择,则A B差值最大是多少. 分析: 总和是一定的,所以一个得分越高,另一个人的得分越低.当前状态总是最开始的状态的一个子状态. d(i,j): 先手取 i ~ j 最优策略下,得分最大值. d…
题目链接:https://vjudge.net/problem/UVA-11892 题意: 两人玩游戏,有n堆石子,每堆有ai块石子,两人轮流取,要求一次只能选择一堆石子取任意块.最后取完的获胜. 题解: 由于一堆石子可以取任意块,所以得出一个结论:当存在一堆石子数量大于1时,先手必胜.因为先手可以通过这些石子堆来调整自己的必胜状态(或者说取消对手的必胜状态).但如果每堆石子只有一块,那就每次只能取一块,那结果显而易见了. 代码如下: #include <iostream> #include…
UVA 1558 - Number Game 题目链接 题意:20之内的数字,每次能够选一个数字,然后它的倍数,还有其它已选数的倍数组合的数都不能再选,谁先不能选数谁就输了,问赢的方法 思路:利用dp记忆化去求解,要输出方案就枚举第一步就可以,状态转移过程中,选中一个数字,对应的变化写成一个函数,然后就是普通的博弈问题了,必胜态之后必有必败态,必败态之后全是必胜态 代码: #include <stdio.h> #include <string.h> const int N = 10…
UVA 12293 - Box Game 题目链接 题意:两个盒子,一開始一个盒子有n个球.一个仅仅有1个球,每次把球少的盒子中球消掉,把多的拿一些球给这个盒子.最后不能操作的输(球不能少于1个),Alice先手,问谁赢 思路:博弈.题目事实上能够转化为.给定一个n.每次把降低1到n/2的数字,最后谁是1谁就输了,那么能够去递推前几项找个规律,或者推理,都能够发现仅仅要是2^i - 1的数字Bob就赢,否则Alice赢 代码: #include <stdio.h> #include <s…
姑且把它归类为一道博弈吧,毕竟这也是在找必胜方案. 十分有意思的一道题目,设计一种方案让你支持的1队获胜. 题目给出了两个很重要的条件: 1队能打败至少一半的队伍 对于1队不能打败的黑队,一定存在一个1队能打败的灰队,使得这支灰队能够打败黑队.也就是说1队可以通过灰队间接打败黑队 一共有2n支队伍,每轮比赛会刷掉一半的队伍,紫书上巧妙的做法就是每轮比赛后让题目给的两个性质依然成立,这样1队最终一定能胜出. 方案如下,大致分为3个阶段: 物尽其用.依次考虑每个黑队,如果有能够打败他的灰队的话,便让…
UVA 1557 - Calendar Game 题目链接 题意:给定一个日期,两个人轮流走,每次能够走一月或者一天,问最后谁能走到2001.11.4这个日子 思路:记忆化搜索,对于每一个日期,假设下两个状态有一个非必胜态,那么这个状态是必胜态,假设后继状态都是必胜态,那么该状态为必败态 代码: #include <stdio.h> #include <string.h> const int day[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31,…
Problem B: Bachet's Game Bachet's game is probably known to all but probably not by this name. Initially there are  n  stones on the table. There are two players Stan and Ollie, who move alternately. Stan always starts. The legal moves consist in rem…