copy VS study

1.每堆部是1的时候,是3的倍数时输否则赢;

2.只有一堆2其他全是1的时候,1的堆数是3的倍数时输否则赢;

3.其他情况下,计算出总和+堆数-1,若为偶数,且1的堆数是偶数,则一定输;

4.不在上述情况下则赢。

#include<stdio.h>
int main()
{
int js=;
int _case,i,n,x;
int flag1,flag2,flag,sum;
scanf("%d",&_case);
while(_case--)
{
js++;
flag1=;
flag2=;
flag=;
sum=;
scanf("%d",&n);
for(i=;i<n;i++)
{
scanf("%d",&x);
sum+=x;
if(x==)flag1++;
else if(x==)flag2++;
}
if(flag1==n)
{
if(flag1%==)flag=;
}
else if(flag1==n-&&flag2==)
{
if(flag1%==)flag=;
}
else
{
if((sum+n-)%==&&flag1%==)
flag=;
}
printf("Case #%d: ",js);
if(flag)printf("Bob\n");
else printf("Alice\n");
}
return ;
}

转载:

题意:有N堆石头,可以把两堆合成一堆,也可以把一堆去掉一个。

由于总数不变,最终总是要一个个拿完。那么有机会获胜的一方,肯定是先要把所有的合在一起,那么最终就拼奇偶数了。所以双方都要合并。总共就是sigma(ai)+n-1。

而且如果没有某堆只有一个的话,对方是阻挡不住的,没有取完,便被合并了。

所以就要考虑某堆只有一个的情况,单独考虑。

其中的操作包括:

把某堆只有一个的,取走

把两堆只有一个的,合并

把某堆只有一个的,合并给不是一个的

把不是一个的,取走一个

采用记忆化搜索

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define N 10005
#define LL long long
#define inf 1<<29
#define eps 1e-7
using namespace std;
int sg[][];
int get_sg(int i,int j)
{
if(sg[i][j]!=-)
return sg[i][j];
if(j==)
return sg[i][j]=get_sg(i+,);
sg[i][j]=;
//某堆只有一个的取掉
if(i>=&&!get_sg(i-,j))
sg[i][j]=;
//把不是1个的取走一个
else if(j>=&&!get_sg(i,j-))
sg[i][j]=;
//把1个的合并给不是1个的
else if(i>=&&j>&&!get_sg(i-,j+))
sg[i][j]=;
//把两个1个的合并,其中注意,合并是需要一步的
else if(i>=&&((j==&&!get_sg(i-,j+))||(j&&!get_sg(i-,j+))))
sg[i][j]=;
return sg[i][j];
}
int main()
{
int n,t,cas=,k;
scanf("%d",&t);
memset(sg,-,sizeof(sg));
while(t--)
{
scanf("%d",&n);
int one=,sum=;
while(n--)
{
scanf("%d",&k);
if(k==)
one++;
else
sum+=(k+);
}
if(sum)
sum--;
printf("Case #%d: ",++cas);
if(get_sg(one,sum))
puts("Alice");
else
puts("Bob");
}
return ;
}

至此SG函数应该算是了解掌握了;

不过学ACM之初没有好好练习搜索,

以致目前仍然不能熟练的打SG表。Orz

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 (博弈+记忆化搜索)

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

  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 5708 Alice and Bob (博弈,找规律)

    题意: 一个无限大的棋盘,一开始在1,1,有三种移动方式,(x+1,y)(x,y+1) (x+k,y+k)最后走到nm不能走了的人算输.. 析:.我们看成一开始在(n,m),往1,1,走,所以自然可以 ...

  5. hdu 4111 Alice and Bob 博弈论

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

  6. Foj 2296 Alice and Bob(博弈、搜索)

    Foj 2296 Alice and Bob 题意 两个人博弈,规则如下:轮流取0~9中的数字,最后Alice所得的数字个数为1~n中,数位在Alice所取集合中出现奇数次的. 双方想获得尽量多,问A ...

  7. Alice and Bob(博弈)

    Alice and Bob Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users ...

  8. hdu 4268 Alice and Bob

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

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

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

随机推荐

  1. RSA和DES------加密和解密类

    public class CryptogramUtil { //******************************************************************** ...

  2. [转]安装openoffice,并且配置为windows服务

    [转]安装openoffice,并且配置为windows服务 http://blog.csdn.net/zzzz3621/article/details/18400277 下载windows reso ...

  3. Android实现入门界面布局

    Android实现入门界面布局 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 首先是常量的定义,安卓中固定字符串应该定义在常量中. stri ...

  4. gcc 创建库及使用

    gcc -shared hello.c -o libhello.so gcc -o test test.c -L库所在目录 -l库名

  5. 黑金开发板上开发的PWM

    /*自己做的PWM程序*2014-01-09*/module pwm(clk,rst,led);input clk,rst;output [7:0] led;parameter T=31'd20000 ...

  6. 动态链接库知识点归纳之一(DLL概念,如何建立,如何使用,如何优化,如何查看)

    简单的总结一些动态链接库的一些知识,方便以后查找. 首先,新建一个动态链接库 (1)      打开编辑器,选择WIN32项目, dll,如下图,项目名字为:test,选择空项目.如下图 (2)    ...

  7. web 性能忧化(IIS篇)

    1. 调整IIS 7应用程序池队列长度 由原来的默认1000改为65535. IIS Manager > ApplicationPools > Advanced Settings 2.   ...

  8. UITableView 应用及其总结

    Plain: Grouped: Cell的结构图: UITableViewCellStyleDefault:预设使用这种,若左侧ImageView没图的话,只有一行字(textLable.text). ...

  9. 20145103JAVA第一次实验报告

    20145103<Java程序设计>第一次实验报告 实验内容及其步骤 一.命令行下java程序开发 建立一个java文件,然后在命令行中,对程序进行javac编译,就生成了.class文件 ...

  10. Reveal 破解

    永久试用Reveal,只需要打开 ~/Library/Preferences/com.ittybittyapps.Reveal.plist 把IBAApplicationPersistenceData ...