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 ...
随机推荐
- Android 自定义View修炼-仿QQ5.0 的侧滑菜单效果的实现
有一段时间没有写博客了,最近比较忙,没什么时间写,刚好今天有点时间, 我就分享下,侧滑菜单的实现原理,一般android侧滑的实现原理和步骤如下:(源码下载在下面最后给出哈) 1.使用ViewGrou ...
- 在ModelSim波形图中以参数名显示变量
在ModelSim波形图中以参数名显示变量 在使用Verilog HDL编写有限状态机等逻辑的时候,状态机的各个状态通常以参数表示,但当使用ModelSim仿真的时候,状态机变量在wave窗口中以二进 ...
- (转)我所理解的OOP——UML六种关系
原文地址:http://www.cnblogs.com/dolphinX/p/3296681.html 最近由于经常给公司的小伙伴儿们讲一些OOP的基本东西,每次草纸都被我弄的很尴尬,画来画去自己都乱 ...
- 走进React的学习之路
GIT: 代码管理.https://git-scm.com/book/zh/v2 ES6: http://www.infoq.com/cn/minibooks/ES6-in-Depth Webpack ...
- Unity3D 之3D动画机设置
新建一个动画机 然后创建一些动画的属性 每根线都是一个动画到下一个动画的转变,动画的转变是基于条件的. 1.通过建立Parameters设定动画的转换条件 2.右边的Conditions设定可以设定是 ...
- MVC小系列(四)【向RouteData里扔数据】
向RouteData里扔数据 当Url做路由之后,QueryString里当然是不可能再存你的信息了,而信息包括控制器,action,参数都会存储在RouteData里,而一般这里的信息都是通过前一个 ...
- 在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法
在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法 ==========方法1: --------1. 选相应 ...
- 配置nginx的负载均衡
1.1 什么是负载均衡 负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 负载均衡,英文名称 ...
- (转)IOS学习笔记-2015-03-29 int、long、long long取值范围
unsigned - - unsigned - - unsigned __int64的最大值: __int64的最小值:- unsigned __int64的最大值:
- ASP.NET中Json的处理
要使用.NET自带的JSON处理工具需要引用下面的命名空间: using System.Web.Script.Serialization; 1.编码 myConfig mc = new myConfi ...