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 ...
随机推荐
- 基于DOM的XSS注入漏洞简单解析
基于DOM的XSS注入漏洞简单解析http://automationqa.com/forum.php?mod=viewthread&tid=2956&fromuid=21
- ModelAndView使用方法
配置支持ModelAndView 在application.xml中配置支持ModelAndView,配置方式有两种. 配置一 <bean id="ViewResolver" ...
- 理解Objective-c中的copy
说一下深拷贝和浅拷贝的基本概念:a指针指向地址A1, 浅拷贝是创建了一个b指针指向地址A1:深拷贝是创建了一个c指针指向地址A2,A1和A2的地址不同. 我们看到NSObject接口里面是已经声明了c ...
- ng1中 如何用双向绑定 实现单向绑定的初始时不显示双括号效果?
ng1中 如何用双向绑定 实现单向绑定(ng-bind就可以不显示{{}})的初始时不显示双括号效果? AngularJS 实例 页面加载时防止应用闪烁: <div ng-app="& ...
- java中数据类型及运算符的注意事项
数据类型: boolean 类型数据只允许取值true 或 false(不可以使用0 或非0的整数来代替true和false,区分于C语言). char:Java中用" \u四位十六进制的数 ...
- Xcode8 Could not build Objective-C module 'FBSDKCoreKit'
解决方法是: 删除/Users/Rinpe/Library/Developer/Xcode/DerivedData下对应的文件夹即可.
- IOS GCD 的理解
GCD (Grand Central Dispatch) 是Apple公司开发的一种技术,它旨在优化多核环境中的并发操作并取代传统多线程的编程模式. 在Mac OS X 10.6和IOS 4.0之后开 ...
- C#冒泡排序法程序代码
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...
- C++ Union妙用(将列表初始化用于数组元素)
Union是个不被注意的关键字,意为联合体,这是个诡异的名字.若不是为了继承C语言,它也不会出现在C++中(虽说,union在C++中得到了扩充,完成了接近类的功能).它的作用主要是节省内存空间,在嵌 ...
- 工具系列之Sublime Text 3 使用总结
1.Sublime Text 2/3如何支持中文GBK编码(解决中文乱码) Sublime Text默认是只支持UTF8的编码,所以有些时候,当我们打开GBK文件时候,文件内会出先部分的乱码,如下图 ...