UVA 1557 - Calendar Game(博弈dp)
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, 30, 31, 30, 31};
int dp[105][15][32]; int t, y, m, d; bool islead(int num) {
num += 1900;
if (num % 100 == 0) {
if (num % 400 == 0) return true;
}
else {
if (num % 4 == 0) return true;
}
return false;
} bool judge(int y, int m, int d) {
if (y >= 2001) {
if (y > 2001) return false;
if (m >= 11) {
if (m > 11) return false;
if (d > 4) return false;
}
}
if (islead(y) && m == 2 && d == 29) return true;
if (day[m] < d) return false;
return true;
} int dfs(int y, int m, int d) {
if (dp[y][m][d] != -1) return dp[y][m][d];
if (y == 101 && m == 11 && d == 4) return dp[y][m][d] = 1;
int dd = d, mm = m + 1, yy = y;
if (mm > 12) {
mm -= 12;
yy++;
}
int ans = 1;
if (judge(yy, mm, dd))
ans &= dfs(yy, mm, dd);
int tmp = 0;
if (islead(y) && m == 2) tmp = 1;
dd = (d + 1);
mm = m;
yy = y;
if (dd > day[m] + tmp) {
dd -= day[m] + tmp;
mm++;
}
if (mm > 12) {
yy++;
mm -= 12;
}
if (judge(yy, mm, dd))
ans &= dfs(yy, mm, dd);
return dp[y][m][d] = (!ans);
} int main() {
memset(dp, -1, sizeof(dp));
scanf("%d", &t);
while (t--) {
scanf("%d%d%d", &y, &m, &d);
y -= 1900;
printf("%s\n", dfs(y, m, d)?"YES":"NO");
}
return 0;
}
UVA 1557 - Calendar Game(博弈dp)的更多相关文章
- uva 1557 - Calendar Game(博弈)
option=com_onlinejudge&Itemid=8&page=show_problem&problem=4332" target="_blank ...
- UVA 1558 - Number Game(博弈dp)
UVA 1558 - Number Game 题目链接 题意:20之内的数字,每次能够选一个数字,然后它的倍数,还有其它已选数的倍数组合的数都不能再选,谁先不能选数谁就输了,问赢的方法 思路:利用dp ...
- HDU 5623 KK's Number (博弈DP)
KK's Number 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/K Description Our lovely KK h ...
- UVA.10066 The Twin Towers (DP LCS)
UVA.10066 The Twin Towers (DP LCS) 题意分析 有2座塔,分别由不同长度的石块组成.现在要求移走一些石块,使得这2座塔的高度相同,求高度最大是多少. 问题的实质可以转化 ...
- 博弈dp 以I Love this Game! POJ - 1678 为例
写在前面的话 知识基础:一些基础的博弈论的方法,动态规划的一些知识 前言:博弈论就是一些关于策略或者游戏之间的最优解,动态规划就是对于一些状态之间转移的一些递推式(or 递归),dp分为很多很多种,比 ...
- 博弈dp入门 POJ - 1678 HDU - 4597
本来博弈还没怎么搞懂,又和dp搞上了,哇,这真是冰火两重天,爽哉妙哉. 我自己的理解就是,博弈dp有点像对抗搜索的意思,但并不是对抗搜索,因为它是像博弈一样,大多数以当前的操作者来dp,光想是想不通的 ...
- UVA 10003 Cutting Sticks 区间DP+记忆化搜索
UVA 10003 Cutting Sticks+区间DP 纵有疾风起 题目大意 有一个长为L的木棍,木棍中间有n个切点.每次切割的费用为当前木棍的长度.求切割木棍的最小费用 输入输出 第一行是木棍的 ...
- UVA 10404 Bachet's Game(dp + 博弈?)
Problem B: Bachet's Game Bachet's game is probably known to all but probably not by this name. Initi ...
- UVa 12525 Boxes and Stones (dp 博弈)
Boxes and Stones Paul and Carole like to play a game with S stones and B boxes numbered from 1 to B. ...
随机推荐
- ioctl用法详解 (网络)
本函数影响由fd参数引用的一个打开的文件. #include#include int ioctl( int fd, int request, .../* void *arg */ );返回0:成功 ...
- web.config配置详细说明
(一).Web.Config是以XML文件规范存储,配置文件分为以下格式 1.配置节处理程序声明 特点:位于配置文件的顶部,包含在<configSections>标志中. 2.特定应 ...
- hdu 3938 Portal(并查集+离线+kruskal)2011 Multi-University Training Contest 10
搜了题解才把题搞明白.明白之后发现其实题意很清晰,解题思路也很清晰,只是题目表述的很不清晰…… 大意如下—— 给你一个无向图,图中任意两点的距离是两点间所有路径上的某一条边,这条边需要满足两个条件:1 ...
- 使用SQL语句清空数据库所有表的数据
使用SQL语句清空数据库所有表的数据 近来发现数据库过大,空间不足,因此打算将数据库的数据进行全面的清理,但表非常多,一张一张的清空,实在麻烦,因此就想利用SQL语句一次清空所有数据.找到了三种方法进 ...
- [原创]谷歌插件 - YE搜图助手(YeImageFinder)
最新版本:下载 版本:v1.5 更新时间:2014年10月08日 +完善了:YeImageFinder:支持在每次启用插件时,也能正常绑定右键! +完善了:每次做完动作后,就马上关闭自身! 版本:v ...
- VS2010下 LibVLC开发环境搭建
LibVLC环境的搭建 最近又 LIBVLC 做一个视频播放器,封装成ActiveX控件,之前做过一个基于OpenCV的播放器(只解码视频,音频不用,OpenCV也没有解码音频的功能). 到目前位置 ...
- Asp.net MVC 处理文件的上传下载
如果你仅仅只有Asp.net Web Forms背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUpload就是其中一个, ...
- linux下安装pkg-config时遇到"glib-2.0>=2.16"的错
解决办法 如报错提示所述,加上:--with-internal-glib 即 ./configure --with-internal-glib 参考链接: http://stackoverflow.c ...
- 在Raspberry Pi上安装XBMC
2013-05-22 XBMC is a free and open source media player application developed by the XBMC Foundation, ...
- Javascript异步请求你能捕获到异常吗?
Javascript异步请求你能捕获到异常吗? 异常处理是程序发布之前必须要解决的问题,不经过异常处理的应用会让用户对产品失去信心.在异常处理中,我们一贯的做法是按照函数调用的次序,将异常从数据访问层 ...