题目

Alice和Bob两个好朋友又开始玩取石子了。

游戏开始时,有\(n\)堆石子排成一排,然后他们轮流操作(Alice先手),每次操作时从下面的规则中任选一个:

·从某堆石子中取走一个

·合并任意两堆石子

不能操作的人输。Alice想知道,她是否能有必胜策略。


分析

如果不存在大小为1的石堆,则操作次数一定被控制为\(sum+n-1\),判断奇偶性即可,

若存在大小为1的石堆,它有五种后继状态

  1. 直接取走大小为1的石堆
  2. 直接取走大小超过1的石堆中的一颗石子
  3. 将大小为1的石堆合并至大小超过1的石堆
  4. 合并两个大小超过1的石堆(不会影响操作次数)
  5. 将两个大小为1的石堆合并为1个石堆

    根据5个后继状态SG函数值求出该状态的SG函数值即可

代码

#include <cstdio>
#include <cctype>
#include <cstring>
#define rr register
using namespace std;
int sg[51][60011],Test;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline signed min(int a,int b){return a<b?a:b;}
inline signed dfs(int one,int sum){
if (~sg[one][sum]) return sg[one][sum];
if (!one) return sg[one][sum]=sum&1;
if (sum==1) return sg[one][sum]=dfs(one+1,0);//全都是1
rr int MEX=dfs(one-1,sum);
if (sum) MEX=min(MEX,dfs(one,sum-1));
if (one>1) MEX=min(MEX,dfs(one-2,sum+2+(sum>0)));//合并两堆大小为1的石子
if (sum) MEX=min(MEX,dfs(one-1,sum+1));//将大小为1的石堆与大小超过1的石堆合并
return sg[one][sum]=MEX^1;
}
signed main(){
memset(sg,-1,sizeof(sg)),Test=iut();
for (rr int i=1;i<=Test;++i){
rr int one=0,sum=0;
for (rr int T=iut();T;--T){
rr int x=iut();
if (x==1) ++one;
else sum+=x+1;
}
sum-=(sum>0),dfs(one,sum);
printf("Case #%d: ",i);
puts(sg[one][sum]?"Alice":"Bob");
}
return 0;
}

#SG函数,记忆化搜索#HDU 4111 Alice and Bob的更多相关文章

  1. POJ 2311 Cutting Game(Nim博弈-sg函数/记忆化搜索)

    Cutting Game 题意: 有一张被分成 w*h 的格子的长方形纸张,两人轮流沿着格子的边界水平或垂直切割,将纸张分割成两部分.切割了n次之后就得到了n+1张纸,每次都可以选择切得的某一张纸再进 ...

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

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

  3. 记忆化搜索 hdu 1331

    Function Run Fun Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

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

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

  5. POJ2425 A Chess Game(SG函数+记忆化深搜)

    题目链接:传送门 题目大意: 在一个有N个点的拓扑图上(拓扑图以邻接表的形式输入),放M个棋子(棋子与棋子之间无关,可以重合). 两人轮流移动棋子,每次只能移动一个棋子经过一条边. 问先手是否必胜. ...

  6. hdu 4111 Alice and Bob 博弈论

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

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

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

  8. hdu 4111 Alice and Bob

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

  9. BZOJ 3895 3895: 取石子 / Luogu SP9934 ALICE - Alice and Bob (博弈 记忆化搜索)

    转自PoPoQQQ大佬博客 题目大意:给定n堆石子,两人轮流操作,每个人可以合并两堆石子或拿走一个石子,不能操作者输,问是否先手必胜 直接想很难搞,我们不妨来考虑一个特殊情况 假设每堆石子的数量都&g ...

  10. HDU 1176 免费馅饼(记忆化搜索)

    免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

随机推荐

  1. 项目实战:Qt+Android模拟操作器(模拟操作app,打开,点击,输入,获取验证码等等)

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/109313803各位读者,知识无穷而人力有穷,要 ...

  2. 【LeetCode动态规划#01】动规入门:求斐波那契数 + 爬楼梯 + 最小代价爬楼梯(熟悉解题方法论)

    斐波那契数 力扣题目链接(opens new window) 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就 ...

  3. 【App Service】遇见本地访问Azure App Service应用慢或者是调用第三方接口慢的调试小工具

    问题描述 当应用部署到微软云 Azure后,如果遇见本地访问Azure App Service应用慢或者是调用第三方接口慢的时候,有什么好的调试方法呢? 来判断具体时那一段请求耗时呢? 问题解答 当然 ...

  4. 【Azure Developer】Visual Studio 2019中如何修改.Net Core应用通过IIS Express Host的应用端口(SSL/非SSL)

    问题描述 在VS 2019调试 .Net Core Web应用的时,使用IIS Express Host,默认情况下会自动生成HTTP, HTTPS的端口,在VS 2019的项目属性->Debu ...

  5. Codeforces Round 914 (Div. 2)A~C

    A 反过来考虑,由皇后和国王的位置去寻找骑士的位置,当一个点既可以被皇后找到,也可以被国王找到时就说明这个点是满足条件的 #include <bits/stdc++.h> #define ...

  6. Spring5课堂笔记

    Spring5 1..Spring 1.1.简介 Spring --> 春天,为开源软件带来了春天 2002,首次推出了Spring框架的雏形:interface21框架! Spring框架以i ...

  7. iview viewDesign table 单选 Radio

    columns.js export default [ { title: '选择', slot: 'choose', align: 'center', width: 100 }, table里面 &l ...

  8. day07-IO流应用02

    Java坦克大战07 8.IO流应用02 8.3记录退出游戏时敌人坦克坐标/方向,存盘退出 8.3.1思路分析 在Recorder类中,增加一个Vector集合,用来接收从MyPanel类中传入的en ...

  9. XXL-JOB初探

    参考:欢迎点击原文:https://www.xuxueli.com/xxl-job/(官方) https://blog.csdn.net/f2315895270/article/details/104 ...

  10. Web service是什么? (转载)

    转载自 : Web service是什么?- 阮一峰的网络日志 作者: 阮一峰 日期: 2009年8月26日 我认为,下一代互联网软件将建立在Web service(也就是"云") ...