您的位置:首页 > 其它

HDU 4371 Alice and Bob [简单博弈]

2012-10-10 09:58 513 查看
  有K个数D1~DK,一开始S0=0,每个人可以报一个数Si+1=Si-1+Dj或者Si+1=Si-Dj(1<=j<K),并且满足Si<=N及Si>Si-2,最先不能报数者输。

  如果自己在某回合报的不是最小数,那么对方就可以减掉最小数使S变小,因为要满足条件自己又要加上一个比最小数大的数,对方又可以减掉最小数。。。这样每次使数变大的都是自己,必输。

  所以最优策略就是一直报最小数。

  

#include <stdio.h>
#include <string.h>
#include <queue>
#define INF 0x3f3f3f3f
#define MAXN 335
int cas, n, m, x, minx;
int main(){
//freopen("test.in", "r", stdin);
scanf("%d", &cas);
for (int ca = 1; ca <= cas; ca++) {
scanf("%d%d", &n, &m);
minx = INF;
for (int i = 0; i <m; i++) {
scanf("%d", &x);
minx = std::min(x, minx);
}
printf ("Case #%d: %s", ca, (n/minx)&1 ? "Bob\n":"Alice\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: