题目链接:
选我选我
就是有n堆物品,然后只有一堆物品完全选完后,才能选好后面的,看最后谁赢。
思路:
确定第一个不为1的是轮到谁,如果谁得到了这个优势,那么他就必胜。。因为他可以人为控制后面的顺序了。。
题意:
题目:
Revenge of Nim
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/...
分类:
其他好文 时间:
2014-09-13 12:08:15
阅读次数:
190
题目链接:HDU 4993 Revenge of ex-Euclid
题意:两个取石头,分别在N堆里去。只有第一堆取完才能取第二堆,以此类推,最后一个取完的为赢家。
思路:从头开始扫,直到第一个不为1为止,判断现在的主动权在谁手里,谁就是赢家。(这里读者可以自己写几组数据试试。)
AC代码:
#include
#include
int main()
{
int...
分类:
其他好文 时间:
2014-09-13 09:27:04
阅读次数:
204
题目地址:HDU 4994
在这个题中,谁拥有了第一个大于1的数的控制权,就是谁赢,因为它可以有两种选择,一种是全选,另一种是选n-1个,此时另一个只能选剩下的那一个。但是当数位1的时候是没法控制的,只能选这一个。这时候就可以在每次选一个大于1的数的时候,就通过这两种选择,来让自己会正好选下一个大于1的数,由于中间的全是1,所以完全可以达到目的。这样只要控制了第一个大于1的数,那后面的就可以通过...
分类:
其他好文 时间:
2014-09-12 23:32:00
阅读次数:
331
题目链接
题意:有n堆石子,每个堆有Ai个石头,求先手是否能取得最后一个石头。
思路:这题主要在于前置1的多少能改变谁能成为先手,当前置1为偶数时,先手还是原来的先手,当为奇数时,先手就变成后手,后手变成先手。记得考虑当所有石堆都只有一个石头的情况。
代码:
#include
#include
#include
#include
using namespa...
分类:
其他好文 时间:
2014-09-12 22:10:14
阅读次数:
298
http://acm.hdu.edu.cn/showproblem.php?pid=1848利用计算grundy数组,把一类博弈转化为nim博弈,最后x不为0为先手必胜态#include #include #include #include #include using namespace std ...
分类:
其他好文 时间:
2014-09-01 02:43:52
阅读次数:
227
砍树思路:可以将题目意图转化为:给定一棵树,求其中最接近总权值一半的子树。DFS求每个节点的所有子节点的权值和,遍历每个节点,最接近总权值一半的即为答案。复杂度O(N)。石子游戏:思路:一个Nim博弈问题,寻找一个局面的平衡状态,由于是多堆石子,参看Nim博弈的相关理论。
分类:
其他好文 时间:
2014-08-14 16:39:08
阅读次数:
206
我们知道在Nim博弈中
如果我们面对的是一个非奇异局势(a,b,c),要如何变为奇异局势呢?假设 a
b)=(a(+)a)(+)(b(+)b)=0(+)0=0。要将c 变为a(+)b,只要从 c中减去 c-(
a(+)b)即可。
也就是说,其中一个堆C必须大于所有其他所有堆异或的值,由此我们可以进行枚举
即(sum^a[i])#include
int main()...
分类:
编程语言 时间:
2014-07-27 23:38:10
阅读次数:
245
UVA 1559 - Nim
题目链接
题意:一开始有s个石子,2n个人轮流取石子,每个人有个最大能取数目,2n个人奇数一队,偶数一队,取到最后一个石子的队输,问谁赢
思路:记忆化搜索,每个人取的时候对应的后继状态如果有一个必败态,则该状态为必胜态,如果都是必胜态,则该状态为必败态
代码:
#include
#include
int n, s, m[25], d...
分类:
其他好文 时间:
2014-07-18 23:06:52
阅读次数:
431
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1850
Being a Good Boy in Spring Festival
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(...
分类:
编程语言 时间:
2014-05-15 20:04:04
阅读次数:
449