uva 1557 - Calendar Game(博弈)】的更多相关文章

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,…
option=com_onlinejudge&Itemid=8&page=show_problem&problem=4332" target="_blank" style="">题目链接:uva 1557 - Calendar Game 题目大意:给定一个日期,每次能够选择加一个月,或者加一天,加一个月的前提是下一个月有相应的日期,比方1.30加一个月变成2.30是不合法的.日期上限为2001.11.4.两个人轮流操作.不能操…
UVA 1558 - Number Game 题目链接 题意:20之内的数字,每次能够选一个数字,然后它的倍数,还有其它已选数的倍数组合的数都不能再选,谁先不能选数谁就输了,问赢的方法 思路:利用dp记忆化去求解,要输出方案就枚举第一步就可以,状态转移过程中,选中一个数字,对应的变化写成一个函数,然后就是普通的博弈问题了,必胜态之后必有必败态,必败态之后全是必胜态 代码: #include <stdio.h> #include <string.h> const int N = 10…
2011 was a crazy year. Many people all over the world proposed on 11-11-11, married on 11-11-11, some even went through surgery only to have 11-11-11 as their child's birth date. How crazy people can be! Don't they see there is a "20" hidden? Th…
UVA 12293 - Box Game 题目链接 题意:两个盒子,一開始一个盒子有n个球.一个仅仅有1个球,每次把球少的盒子中球消掉,把多的拿一些球给这个盒子.最后不能操作的输(球不能少于1个),Alice先手,问谁赢 思路:博弈.题目事实上能够转化为.给定一个n.每次把降低1到n/2的数字,最后谁是1谁就输了,那么能够去递推前几项找个规律,或者推理,都能够发现仅仅要是2^i - 1的数字Bob就赢,否则Alice赢 代码: #include <stdio.h> #include <s…
很明显带有博弈的味道.让A-B最大,由于双方都采用最佳策略,在博弈中有一个要求时,让一方的值尽量大.而且由于是序列,所以很容易想到状态dp[i][j],表示序列从i到j.结合博弈中的思想,表示初始状态i->j情况下,先手能获得的最大分数.后手能获得的就是sum[i][j]-dp[i][j].接下来枚举先手选取的是两端的哪一段即可. #include <iostream> #include <cstdio> #include <cstring> using name…
UVA 10561 - Treblecross 题目链接 题意:给定一个串,上面有'X'和'.',能够在'.'的位置放X.谁先放出3个'X'就赢了,求先手必胜的策略 思路:SG函数,每一个串要是上面有一个X,周围的4个位置就是禁区了(放下去必败).所以能够以X分为几个子游戏去求SG函数的异或和进行推断.至于求策略.就是枚举每一个位置就能够了 代码: #include <stdio.h> #include <string.h> #include <algorithm> u…
题目大意:从1900年1月1日 - 2001年11月4日间选择一天为起点,两个人依次进行两种操作中的任意一种,当某人操作后为2001年11月4日时,该人获胜.问先手是否获胜 操作1:向后移一天 操作2:向后移一月 题目思路:设:op=month+day,除了9.30和11.30外无论进行哪一种操作都会改变op的奇偶性,而11+4=15所以起点为偶数(9.30,11.30除外)时先手胜,且先手此时可以避免对手选中9.30和11.30(因为后手总是面临奇数局面,先手可以避免选中9.29和11.29)…
题意:给定一个日期,然后 A 和 B 双方进行操作,谁先把日期变成2001年11月04日,将获胜,如果超过该日期,则输了,就两种操作. 第一种:变成下一天,比如现在是2001.11.3 变成 2001.11.4 第二种,变成下一个月的同一天,比如现在是2001.10.3 变成 2001.11.3,当然有可能是不成立的,比如2001.1.30 不能变成2001.2.30,因为2月没有30天. 析:因为题目中说了是从1990年到2001年,大约100年的时间,也就是400 * 100,完全可以存储下…
题意:r*c方格中,每个格子有一定石子,每次移动每格任意数量石子,只能向下或者向右动一格,不能移动为败 思路:显然是Nim,到右下曼哈顿距离为偶数的不用管,因为先手动一下后手动一下最后移到右下后还是先手的回合:奇数移动一格必到偶数格,所以奇数的Nim一下.很简单的入门题. 代码: #include<set> #include<map> #include<stack> #include<cmath> #include<queue> #include…