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 ...
随机推荐
- IOS基础之设置APP的名字、设置图标、添加等待加载时的图片
1.我们的app一般默认的名字是我们的工程名字,所以我们一般会更改一个更加友好的名字,更改的方法如下图: 找到InfoPlist.strings文件,在里面添加语句CFBundleDisplayNam ...
- <邮件服务postfix+mysql>MAIL第二篇
环境:本服务是建立在第一篇的基础之上的,最好搭建好第一篇 玩此服务的前提是你的系统装好了msql和postfix服务. Postfix+mysql主要是把邮件服务的发与mysql结合使用.当然mysq ...
- C# 解析XML格式的字符串
public CreateOrderReturnResult GetCreateOrderReturnApi() { var result = new CreateOrderReturnResult( ...
- Android 与 Webservice 的快速保存
前面写了一篇android对sqllite的快速保存博客,今天我们来看看android与webservice的交互,相信很多有经验的人自然就想到了soap.但是如果在小型项目中,具有大材小用之嫌.实际 ...
- [JS进阶] 编写可维护性代码 (1)
今天的web应用大至成千上万行的javascript代码,执行各种复杂的过程,这种演化让我们开发者必须得对可维护性有一定的认识!编写可维护性代码很重要,很多情况下我们是以他人的工作成果为基础,确保代码 ...
- C#项目连接数据库的配置
一:C# 连接SQL数据库 1.用SqlServer数据库,windows身份验证模式<add name="TestSqlSqever" providerName=&q ...
- 简单的优化处理 By LINQ TO SQL
最近在做关于新浪微博授权的一些minisite,数据库并不复杂,所以在数据打交道这块采用了linqtosql,开发起来更快更简单...但是随着用户访问逐渐增多,用户上传的图片也越来越多,因为首页是一个 ...
- 【转】 管理CPU 亲和性
简单地说,CPU 亲和性(affinity) 就是进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性.Linux 内核进程调度器天生就具有被称为 软 CPU 亲和性(affi ...
- php中使用linux命令四大步骤
一.PHP中调用外部命令介绍在PHP中调用外部命令,可以用,1>调用专门函数.2>反引号.3>popen()函数打开进程,三种方法来实现: 方法一:用PHP提供的专门函数(四个):P ...
- 微软职位内部推荐-Senior SDE for Big Data
微软近期Open的职位: Title: Senior SDE The Big Data Tooling team looking for a talented and passionate devel ...