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. MVC 中的@Html.DropDownList下拉框的使用

    MVC 中的下拉框 实现方式,下面为大家介绍一个我自己认为比较好用的实现方式,而二话不说直接上代码: 第一步: 后台代码 //公共的方法 //在每次需要展示下拉框的时候,需要调用一下这个方法 [数据源 ...

  2. modelsim仿真错误解决办法

    编译不成功可能是因为: 1.本身程序有问题. 2.没有设置顶层文件 3.modelsim 出现错误是不要只是看错误的地方,也要看前面的一部分

  3. 在windows下使用vs2013编译和调试mysql源代码

    1. 准备工作 1)OS:win10 + VS2013 2)mysql 源码(windows版):mysql-5.6.25.zip 3)perl tool:ActivePerl-5.16.3.1604 ...

  4. 软件工程——四则运算3(C#)

    一.设计思想 设计两个窗体,在第一个窗体中选择功能参数,在第二个窗体中显示所出题目. 二.源代码 Form1.cs: using System; using System.Collections.Ge ...

  5. C语言编写的随机产生四则运算测试题

    题目:编写一个四则运算测试题的程序,要求每道题都要随机产生 解题思路: 1.编写测试题,且为30道,就要用到循环函数,因此想到用for()函数 2.随机产生两个数,就想到用rand()函数. 注:1. ...

  6. ios应运程序的五种状态

    ios应运程序的五种状态即转化  从apple的官方文档扣下来的 5状态: Not running The app has not been launched or was running but w ...

  7. Spring MVC常用的注解类

    一.注解类配置 要使用springmvc的注解类,需要在springmvc.xml配置文件中用context:component-scan/扫描:  二.五大重要的注解类 1.RequestMapp ...

  8. PDO应用

    <?php //PDO:数据访问抽象层//dsn:数据源://带有事务功能:$dsn = "mysql:host=localhost;dbname=mydb";  ——建立数 ...

  9. C++ 类的成员函数指针 ( function/bind )

    这个概念主要用在C++中去实现"委托"的特性. 但现在C++11 中有了 更好用的function/bind 功能.但对于类的成员函数指针的概念我们还是应该掌握的. 类函数指针 就 ...

  10. Docker 面临的安全隐患,我们该如何应对

    [编者按]对比虚拟机,Docker 在体量等方面拥有显著的优势.然而,当 DevOps 享受 Docker 带来扩展性.资源利用率和弹性提升的同时,其所面临的安全隐患同样值得重视,近日 Chris T ...