组合游戏题;

组合游戏的规则:

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的更多相关文章

  1. hdu 4111 Alice and Bob 记忆化搜索 博弈论

    Alice and Bob Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...

  2. hdu 4111 Alice and Bob(中档博弈题)

    copy VS study 1.每堆部是1的时候,是3的倍数时输否则赢: 2.只有一堆2其他全是1的时候,1的堆数是3的倍数时输否则赢: 3.其他情况下,计算出总和+堆数-1,若为偶数,且1的堆数是偶 ...

  3. hdu 4111 Alice and Bob 博弈论

    这里有2种方法: 方法一:求SG函数 sg[i][j]:i表示1的个数,j表示合并操作的步数. 这共有4种操作: 1.消除一个1: 2.减掉一个1: 3.合并2个1: 4.把1合并到另外不是1中. 代 ...

  4. HDU 4111 Alice and Bob (博弈+记忆化搜索)

    题意:给定 n 堆石头,然后有两种操作,一种是把从任意一堆拿走一个,另一种是把一个石子放到另一堆上. 析:整体看,这个题真是不好做,dp[a][b] 表示有 a 堆1个石子,b个操作,操作是指把其他的 ...

  5. hdu 4268 Alice and Bob

    Alice and Bob Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Tota ...

  6. hdu 4268 Alice and Bob(multiset|段树)

    Alice and Bob Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  7. 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 ...

  8. HDU 4268 Alice and Bob 贪心STL O(nlogn)

    B - Alice and Bob Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u D ...

  9. HDU 4268 Alice and Bob(贪心+Multiset的应用)

     题意: Alice和Bob有n个长方形,有长度和宽度,一个矩形能够覆盖还有一个矩形的条件的是,本身长度大于等于还有一个矩形,且宽度大于等于还有一个矩形.矩形不可旋转.问你Alice最多能覆盖Bo ...

随机推荐

  1. 使用logminer分析日志文件

    实验环境 win7 64  oracle PL/SQL Release 11.2.0.1.0 - Productionhttp://blog.csdn.net/tianlesoftware/artic ...

  2. Android学习之Intent传递数据

    Intent在Activity中的作用主要是有两个: 1.启动目标Activity 2.传递数据 Intent在传递数据时分两种情况:向下一个Activity传递数据和从下一个Activity返回数据 ...

  3. HINSTANCE数据类型

    作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)版权声明:本文的版权归作者与博客园共同所有.转载时请在明显地方注明本文的详细链接,未经作者同意请不要删 ...

  4. semaphore(信号量)使用说明

    例子:      以一个停车场运作为例.为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的.这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放下车拦,剩下的车则必须在入口等待, ...

  5. Magento Block设计分析(深入分析)

    Magento中Block是一个很重要的组件,它在Block中充当非常重要的角色,下面我们来分析一下Magento中Block是怎样设计的,我们应该怎样使用这个重要的角色. 1.Magento Blo ...

  6. Oracle 递归函数与等级

    --基数数据1 SELECT ID, mt.materialtypename, mt.parenttypeid FROM material_type mt; 使用递归还是与LEVEL 1 SELECT ...

  7. (三)映射对象标识符(OID)

    所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 用对象标识符(OID)来区分对象 例子: h ...

  8. iOS--NSNetService和NSNetServiceBrowser(Bonjour网络编程)

    Cocoa 网络框架: Cocoa 网络框架有三层,最底层的是基于 BSD socket库,然后是 Cocoa 中基于 C 的 CFNetwork,最上面一层是 Cocoa 中 Bonjour.通常我 ...

  9. Core Data(数据持久化)

    Core Data可能是OS X和iOS中最容易被误解的框架之一了.为了帮助大家理解,我们将快速研究Core Data,来看一下它是关于什么的.为了正确使用Core Data, 有必要理解其概念.几乎 ...

  10. 接口(工厂模式&代理模式)

    程序1:简单的接口功能 package com.liaojianya.chapter2; /** * 编写程序实现一个usb接口,定义设备来使用这个接口,从而计算机可以调用具有usb接口的设备. * ...