Alice and Bob

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1130 Accepted Submission(s): 407

Problem Description
Alice and Bob are very smart guys and they like to play all kinds of games in their spare time. The most amazing thing is that they always find the best strategy, and that's why they feel bored again and again. They just invented a new game, as they usually did.

The rule of the new game is quite simple. At the beginning of the game, they write down N random positive integers, then they take turns (Alice first) to either:

1. Decrease a number by one.

2. Erase any two numbers and write down their sum.

Whenever a number is decreased to 0, it will be erased automatically. The game ends when all numbers are finally erased, and the one who cannot play in his(her) turn loses the game.

Here's the problem: Who will win the game if both use the best strategy? Find it out quickly, before they get bored of the game again!
 
Input
The first line contains an integer T(1 <= T <= 4000), indicating the number of test cases.

Each test case contains several lines.

The first line contains an integer N(1 <= N <= 50).

The next line contains N positive integers A
1 ....A
N(1 <= A
i <= 1000), represents the numbers they write down at the beginning of the game.
 
Output
For each test case in the input, print one line: "Case #X: Y", where X is the test case number (starting with 1) and Y is either "Alice" or "Bob".
 
Sample Input
3
3
1 1 2
2
3 4
3
2 3 5
 
Sample Output
Case #1: Alice
Case #2: Bob
Case #3: Bob
博弈,这题,对于是1的堆, 我们可以单独处理,而对于,其它的堆,我们直接加起来,比奇偶,用dp[i][j]表是有i个是1的堆,其它的堆合在一起,再比奇偶,最后,如果等于1就是先取的胜,否刚后取的胜,这样,我们发现,只有是1的堆才会影响最后的结果,如果,这个堆大于1,那个此时会胜的人,一定会,先把这些堆先合,最后再比奇偶,而要败的人,没有任何办法,此时,他就想办法,改变1的堆,因为合并1的堆,相当于操作两次,会变最后的结果,这样,所有的人,都要抢是1的堆,是1的堆,总共有4种操作,1:是直操拿是1的堆,2:合并1的堆到非1的堆,3取不是1的堆4:合并两个非1的堆 ,此时有两种情况,第一,全都是1,这时,只能加2不能合并到非1的堆,第二,有非1的堆,那么,两个1的堆加再合到一个非1的堆加3,这样全部都到位了!
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
int dp[55][60000];
int dfs(int n,int p){
if(dp[n][p]!=-1)return dp[n][p];
if(p==1)return dp[n][p]=dfs(n+1,0);
dp[n][p]=0;
if(n>0&&!dfs(n-1,p)) return dp[n][p]=1;
if(p>1&&!dfs(n,p-1)) return dp[n][p]=1;
if(n>0&&p&&!dfs(n-1,p+1)) return dp[n][p]=1;
if(n>=2&&((p&&!dfs(n-2,p+3))||(!p&&!dfs(n-2,2)))) return dp[n][p]=1;
return dp[n][p];
}
int main()
{
int tcase,n,i,pri,k,ans,tt=1;
mem(dp,-1);
scanf("%d",&tcase);
while(tcase--){
k=0;ans=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&pri);
if(pri==1)k++;
else ans+=pri+1;
}
if(ans)ans--;
printf("Case #%d: ",tt++);
if(dfs(k,ans))printf("Alice\n");
else printf("Bob\n");
}
return 0;
}

hdu4111 Alice and Bob的更多相关文章

  1. 2016中国大学生程序设计竞赛 - 网络选拔赛 J. Alice and Bob

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

  2. bzoj4730: Alice和Bob又在玩游戏

    Description Alice和Bob在玩游戏.有n个节点,m条边(0<=m<=n-1),构成若干棵有根树,每棵树的根节点是该连通块内编号最 小的点.Alice和Bob轮流操作,每回合 ...

  3. Alice and Bob(2013年山东省第四届ACM大学生程序设计竞赛)

    Alice and Bob Time Limit: 1000ms   Memory limit: 65536K 题目描述 Alice and Bob like playing games very m ...

  4. sdutoj 2608 Alice and Bob

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2608 Alice and Bob Time L ...

  5. hdu 4268 Alice and Bob

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

  6. 2014 Super Training #6 A Alice and Bob --SG函数

    原题: ZOJ 3666 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3666 博弈问题. 题意:给你1~N个位置,N是最 ...

  7. ACdream 1112 Alice and Bob(素筛+博弈SG函数)

    Alice and Bob Time Limit:3000MS     Memory Limit:128000KB     64bit IO Format:%lld & %llu Submit ...

  8. 位运算 2013年山东省赛 F Alice and Bob

    题目传送门 /* 题意: 求(a0*x^(2^0)+1) * (a1 * x^(2^1)+1)*.......*(an-1 * x^(2^(n-1))+1) 式子中,x的p次方的系数 二进制位运算:p ...

  9. SDUT 2608:Alice and Bob

    Alice and Bob Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Alice and Bob like playing ...

随机推荐

  1. cache 的设计与实现--转载

    本文整理自一下两篇博客:http://my.oschina.net/ScottYang/blog/298727http://my.oschina.net/u/866190/blog/188712 Ca ...

  2. Android四大组件——Service

    Service相关链接 Service初涉 Service进阶 Service精通 Service是Android系统中的一种组件,它跟Activity的级别差不多,但是它不能自己运行,只能后台运行, ...

  3. [转] linux下的僵尸进程处理SIGCHLD信号

    什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息.这些 信息至少包括进程ID,进程的终止状态,以及 ...

  4. 递归---NYOJ-90整数划分(一)

    这个题理解了好大会才理解,看了网上的代码,不太理解,但是后来看了好几个人的, 大同小异吧,慢慢的就理解了. 思路: 递归函数的意思是, 将 n 划分为最大数为 m 的划分数, 可以分几种情况 1. 当 ...

  5. ASP.NET-FineUI开发实践-4(二)

    在网上找了找,实验了一下window弹出和关闭的动画效果分享一下. 接上次的代码 default.js window_tips.animCollapse= true;//打开动画效果 window_t ...

  6. Html.RenderPartial与Html.RenderAction区别(转)

    Html.RenderPartial与Html.RenderAction这两个方法都是用来在界面上嵌入用户控件的. Html.RenderPartial是直接将用户控件嵌入到界面上: <%Htm ...

  7. (转)background-position—CSS设置背景图片的位置

    background-position :在 CSS 中通过 background-position 属性可以调整背景图片的位置.因为在默认情况下背景图片都是从设置了 background-posit ...

  8. FFMPEG 视频旋转设置

    fmpeg -i inputfile.mp4 -vf "transpose=1" outputfile.mp4 0=90CounterCLockwise and Vertical ...

  9. maven的pom.xml深入理解

    maven的pom.xml的具体使用和各个xml标签的作用.这样设计的原理是什么? maven实战的第17章-18章是架构方面的知识

  10. telnet简单操作 模拟请求

    telnet简单操作   模拟请求 一: 二: 三: 按照以上操作即可!