这里有2种方法:

方法一:求SG函数

sg[i][j]:i表示1的个数,j表示合并操作的步数。

这共有4种操作:

1.消除一个1;

2.减掉一个1;

3.合并2个1;

4.把1合并到另外不是1中。

代码如下:

 #include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
int dp[][];
int dfs(int a,int b)
{
if(dp[a][b]!=-) return dp[a][b];
if(b==) return dp[a][b]=dfs(a+,);
dp[a][b]=;
if(a>=&&!dfs(a-,b)) dp[a][b]=;
else if(b>=&&!dfs(a,b-)) dp[a][b]=;
else if(a>=&&((b>=&&!dfs(a-,b+))||(b==&&!dfs(a-,)))) dp[a][b]=;
else if(a>=&&b>=&&!dfs(a-,b+)) dp[a][b]=;
return dp[a][b];
}
int main(){
int i,t,ca=,n,k,one,other;
memset(dp,-,sizeof(dp));
scanf("%d",&t);
while(t--){
scanf("%d",&n);
other=one=;
for(i=;i<n;i++){
scanf("%d",&k);
if(k==) one++;
else other+=k+;
}
if(other) other--;
int ff=dfs(one,other);
printf("Case #%d: ",++ca);
if(ff) puts("Alice");
else puts("Bob");
}
return ;
}

方法二:

可以分四种情况:

1.只有1的时候,1的个数为3的倍数则必输否则赢;

2.只有1个2和若干1时,1的个数为3的倍数则必输否则赢;

3.其他情况,计算总和+个数-1,如果是奇数则必赢否则输;

4.剩下的就赢了。

代码如下:

#include<stdio.h>
#define I(x) scanf("%d",&x)
int main(){
int i,t,n,s,k,j=,m;
bool f;
I(t);
while(t--){
I(m);
for(s=n=f=i=;i<m;i++){
I(k);
if(k==) n++;
s+=k;
}
if(n==m) f=n%;
else if(s-n==) f=n%;
else if((s+m-)&) f=;
else f=n&;
printf("Case #%d: ",++j);
puts(f?"Alice":"Bob");
}
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

    组合游戏题: 组合游戏的规则: 1.必败态的所有后继都是必胜态: 2.必胜态最少有一个必败的后继: 这里的必胜态是f[1][0][0][0]; 其中f[a][b][c][d]表示有a个1,b个2,c个 ...

  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. Request.IsLocal与Request.Url.IsLoopback的区别

    均在服务器上访问时: http://localhost:17810 Request.IsLocal => trueRequest.Url.IsLoopback => true http:/ ...

  2. 2.servlet 生命周期

    1.建Web project“2Servlet_Basic” 2.建包com.amaker.servlet 3.建类“ServletBasic.java” package com.amaker.ser ...

  3. Visual Studio 2012 使用免费的Team Foundation Service

    VS2012提供了在线的TFS服务,免费支持五人小团队,收费情况尚未确定,下面本文演示如何申请和连接在线TFS 服务器. 一.申请TFS服务 首先,打开VS2012,看看是否有团队资源管理器,如果没有 ...

  4. js设计模式(8)---享元模式

    0.前言 今天总结了四种设计模式,到现在有点精疲力尽了,但是还是有不少收获,很开心自己有掌握了新的东西,今天变得有了价值. 1.使用条件 1.1.网页中使用了大量资源密集型的对象: 1.2.这些对象中 ...

  5. SQL Server Profiler监控执行语句

    SQL Server Profiler监控执行语句,这个功能主要用在实时的监控对数据库执行了什么操作,从而及时有效的跟踪系统的运行. 常规配置选项,名称.模板.保存到文件(可以复用). 事件选择,可以 ...

  6. C#简单实现发送手机短信

    偶然想起,像编写一个从电脑向手机发送短信的程序,从网上查找到有三种方式:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2) ...

  7. PHP类的自动载入机制

    php的自动加载: 在php5以前,我们要用某个类或类的方法,那必须include或者require,之后才能使用,每次用一个类,都需要写一条include,麻烦 php作者想简单点,最好能引用一个类 ...

  8. 【转】Eazfuscator.NET 3.3中混淆化需要注意的一些问题

    对于DLL,Eazfuscator.NET默认不会混淆化任何公共成员,因为类库的公共成员很有可能被外界调用,而对于EXE的程序集,所有类型都可能被混淆化.注意上面这句话有一个“可能”,因为Eazfus ...

  9. oracle 子查询因子化 浅谈(with的使用)

    近来学习oracle,想要提高自己所写语句的效率和易读性,今天的笔记是关于子查询因子话这么一个东西 因子化的查询不一定可以提高效率,但是一定可以再提高程序的可读性方面成效显著 --with 语句 wi ...

  10. snmptrap使用

    SNMP简单网络管理协议,其中其支持的一个命令snmptrap命令,用于模拟向管理机发送trap消息.   启动陷阱方法: snmptrapd -C -c /etc/snmp/snmptrapd.co ...