hdu 4111 Alice and Bob
组合游戏题;
组合游戏的规则:
1.必败态的所有后继都是必胜态;
2.必胜态最少有一个必败的后继;
这里的必胜态是f[1][0][0][0];
其中f[a][b][c][d]表示有a个1,b个2,c个3,d个4是不是一个必胜态;
可以认为大于3的奇数等同于3,大于4的偶数等同于4.
然后递归求解;
#include <iostream>
using namespace std; bool vis[][][][];
bool f[][][][];
int F(int a,int b,int c,int d)
{
if (!vis[a][b][c][d])
{
//单堆减小一个的情况
if (a>=&&!F(a-,b,c,d)) f[a][b][c][d]=true;
if (b>=&&!F(a+,b-,c,d)) f[a][b][c][d]=true;
if (c>=&&!F(a,b+,c-,d)) f[a][b][c][d]=true;
if (d>=&&!F(a,b,c+,d-)) f[a][b][c][d]=true;
//两两合并的情况
if (a>=&&!F(a-,b+,c,d)) f[a][b][c][d]=true;
if (b>=&&!F(a,b-,c,d+)) f[a][b][c][d]=true;
if (c>=&&!F(a,b,c-,d+)) f[a][b][c][d]=true;
if (d>=&&!F(a,b,c,d-+)) f[a][b][c][d]=true; if (a>=&&b>=&&!F(a-,b-,c+,d)) f[a][b][c][d]=true;
if (a>=&&c>=&&!F(a-,b,c-,d+)) f[a][b][c][d]=true;
if (a>=&&d>=&&!F(a-,b,c+,d-)) f[a][b][c][d]=true;
if (b>=&&c>=&&!F(a,b-,c-+,d)) f[a][b][c][d]=true;
if (b>=&&d>=&&!F(a,b-,c,d-+)) f[a][b][c][d]=true;
if (c>=&&d>=&&!F(a,b,c-+,d-)) f[a][b][c][d]=true; vis[a][b][c][d]=true;
}
return f[a][b][c][d];
} int main()
{
int t,ca=;
cin>>t;
f[][][][]=;
while(t--)
{
int n,a=,b=,c=,d=;
cin>>n;
for (int i=;i<n;i++)
{
int t;
cin>>t;
if (t==) a++;
else if (t==) b++;
else if (t%==) c++;
else d++;
}
cout<<"Case #"<<ca++<<": "<<(F(a,b,c,d)?"Alice":"Bob")<<endl;
}
return ;
}
hdu 4111 Alice and Bob的更多相关文章
- hdu 4111 Alice and Bob 记忆化搜索 博弈论
Alice and Bob Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- hdu 4111 Alice and Bob(中档博弈题)
copy VS study 1.每堆部是1的时候,是3的倍数时输否则赢: 2.只有一堆2其他全是1的时候,1的堆数是3的倍数时输否则赢: 3.其他情况下,计算出总和+堆数-1,若为偶数,且1的堆数是偶 ...
- hdu 4111 Alice and Bob 博弈论
这里有2种方法: 方法一:求SG函数 sg[i][j]:i表示1的个数,j表示合并操作的步数. 这共有4种操作: 1.消除一个1: 2.减掉一个1: 3.合并2个1: 4.把1合并到另外不是1中. 代 ...
- HDU 4111 Alice and Bob (博弈+记忆化搜索)
题意:给定 n 堆石头,然后有两种操作,一种是把从任意一堆拿走一个,另一种是把一个石子放到另一堆上. 析:整体看,这个题真是不好做,dp[a][b] 表示有 a 堆1个石子,b个操作,操作是指把其他的 ...
- hdu 4268 Alice and Bob
Alice and Bob Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ...
- hdu 4268 Alice and Bob(multiset|段树)
Alice and Bob Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 3660 Alice and Bob's Trip(树形DP)
Alice and Bob's Trip Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 4268 Alice and Bob 贪心STL O(nlogn)
B - Alice and Bob Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u D ...
- HDU 4268 Alice and Bob(贪心+Multiset的应用)
题意: Alice和Bob有n个长方形,有长度和宽度,一个矩形能够覆盖还有一个矩形的条件的是,本身长度大于等于还有一个矩形,且宽度大于等于还有一个矩形.矩形不可旋转.问你Alice最多能覆盖Bo ...
随机推荐
- Volley完全解析
从前在学校用的最多的网络请求框架就是AsyncHttpClient,用久了发现这样一个问题,就是代码复用太难,基本上做不到,所以有一段时间又回归了HttpURLConnection和HttpClien ...
- Android(java)学习笔记166:Java中输入和输出流概念
程序在内存中运行,文件在磁盘上,把文件从磁盘上读入内存中来,当然是输入流了, 反之,把内存中的数据写到磁盘上的文件里面去就是输出.通常都是这样的,用了过滤流的情况复杂一些,则另当别论.
- AWS RDS 使用笔记
创建VPC安全组 添加VPC子网 创建RDS子网组 创建RDS参数组 创建MySQL实例 查看RDS终端节点 使用 MySQL 监视器与数据库实例上的数据库连接 安装mysql client $ su ...
- Ubuntu server搭建vsftpd小记
Ubuntu server中搭建vsftpd小记 <h1> 在Ubuntu server中安装vsftpd</h1> sudo apt-get install vsftpd & ...
- 处理 eclipse 导入报错 Invalid project description,问题
有时候在添加工程时,会出现如图所示的错误信息, ,提示显示将要添加的工程已经存在,但是在工作空间里却找不到,这个时候,要做就是, 在导入的时候选择General->Existing Projec ...
- (转)C#中的Dictionary字典类介绍
关键字:C# Dictionary 字典 作者:txw1958原文:http://www.cnblogs.com/txw1958/archive/2012/11/07/csharp-dictionar ...
- cognos 10.2.2 report studio数字---字符型查询注意事项
做了一个简单的报表,就是按照员工编号查询员工,其中员工编号是全数字,我们保存在数据库中的是字符型varchar2(10),所以在report studio中做查询就一直报告服务器错误. 其中使用cas ...
- struts2框架加载配置文件的顺序
struts-default.xml:该文件保存在struts2-core-x.x.x.jar文件中: struts-plugin.xml:该文件保存在 struts2-Xxx-x.x.x.jar等S ...
- 大数据基础知识:分布式计算、服务器集群[zz]
大数据中的数据量非常巨大,达到了PB级别.而且这庞大的数据之中,不仅仅包括结构化数据(如数字.符号等数据),还包括非结构化数据(如文本.图像.声音.视频等数据).这使得大数据的存储,管理和处理很难利用 ...
- 每天一水SGU347
今天本来应该要写校题解报告的,但是CF跪了,一题都没JUDGE出来,最后比赛取消了~郁闷啊! 后来闲的无事,就到处看看contest,随便点进去一个,看到一水题,几分钟写完,马上就WA了!~ 题目的信 ...