hdu 4111 Alice and Bob 博弈论
这里有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 博弈论的更多相关文章
- hdu 4111 Alice and Bob 记忆化搜索 博弈论
Alice and Bob Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- hdu 4111 Alice and Bob(中档博弈题)
copy VS study 1.每堆部是1的时候,是3的倍数时输否则赢: 2.只有一堆2其他全是1的时候,1的堆数是3的倍数时输否则赢: 3.其他情况下,计算出总和+堆数-1,若为偶数,且1的堆数是偶 ...
- hdu 4111 Alice and Bob
组合游戏题: 组合游戏的规则: 1.必败态的所有后继都是必胜态: 2.必胜态最少有一个必败的后继: 这里的必胜态是f[1][0][0][0]; 其中f[a][b][c][d]表示有a个1,b个2,c个 ...
- HDU 4111 Alice and Bob (博弈+记忆化搜索)
题意:给定 n 堆石头,然后有两种操作,一种是把从任意一堆拿走一个,另一种是把一个石子放到另一堆上. 析:整体看,这个题真是不好做,dp[a][b] 表示有 a 堆1个石子,b个操作,操作是指把其他的 ...
- hdu 4268 Alice and Bob
Alice and Bob Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ...
- hdu 4268 Alice and Bob(multiset|段树)
Alice and Bob Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 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 ...
- HDU 4268 Alice and Bob 贪心STL O(nlogn)
B - Alice and Bob Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u D ...
- HDU 4268 Alice and Bob(贪心+Multiset的应用)
题意: Alice和Bob有n个长方形,有长度和宽度,一个矩形能够覆盖还有一个矩形的条件的是,本身长度大于等于还有一个矩形,且宽度大于等于还有一个矩形.矩形不可旋转.问你Alice最多能覆盖Bo ...
随机推荐
- float,double和decimal的精度问题
先标注一个音标,因为我老是读错:decimal ['desɪml] 精度对比: 类型 CTS 类型 描述 有效数字 范围 float System.Single 32-bit single-preci ...
- c++11: less的用法
less主要是重载了operator()方法,用来比较lhs 和 rhs std::less::operator() bool operator()(const T &lhs, const T ...
- shell 字符截取
Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. # 读sharp 谐音 杀: ${var#*//} 杀掉//左边的,保留右边的 ...
- [WinForm]TextBox只能输入数字或者正浮点型数字
关键代码: /// <summary> /// 只能输入数字[KeyPress事件] /// </summary> /// <param name="textB ...
- 获取SilverLight.Web项目中路径Uri
方法一: //获取指定要呈现的xaml内容的包活xaml文件Uri var strFullUrl = Application.Current.Host.Source.AbsoluteUri; if ( ...
- MotionEvent中getX()和getRawX()的区别
http://blog.csdn.net/ztp800201/article/details/17218067 public class Res extends Activity implements ...
- SequoiaDB 与 Hive 集成
SequoiaDB与Hadoop部署 SequoiaDB与Hadoop在物理上部署方案如下图所示,部署建议如下: l SequoiaDB与Hadoop部署在相同的物理设备上,以减少Hadoop与Se ...
- [react native] Error loading page
如上图显示的错误,解决方法如下: 在react native ios项目的info.plist文件中,新增一个属性. 在Info.plist中添加NSAppTransportSecurity类型Dic ...
- 如何去掉html中的超链接
$a= preg_replace("/<a[^>]+>/", "", $a); $a= preg_replace("/<\/a ...
- 小课堂Week9 例外处理设计的逆袭Part2
小课堂Week9 例外处理设计的逆袭Part2 今天继续阅读<例外处理设计的逆袭>这本书,我们先看两个案例: 案例1 问:如果要设计一个依据学号到数据库中查询学生资料的函数,当找不到符合条 ...