bzoj 3895 取石子——博弈论】的更多相关文章

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3895 看题解:https://blog.csdn.net/popoqqq/article/details/43989101 虽然大于1的堆的操作次数带来的必胜或必败在还有等于1的堆存在的情况下就不准了,但仍可以把它先记录下来,因为一旦没有了等于1的堆,就会按那个取,所以它被加入考虑. 注意两点:1.传参时注意如果没有大于1的堆,别传入-1: 2.注意当大于1的堆被取成一个等于1的堆时要判断…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3895 看了博客:https://blog.csdn.net/popoqqq/article/details/43989101 因为只是找有无必胜策略,所以可以搜索求解: 注意记忆化数组不必清空,因为同种状态对应的答案都一样. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include&l…
$ \color{#0066ff}{ 题目描述 }$ Alice和Bob两个好朋含友又开始玩取石子了.游戏开始时,有N堆石子 排成一排,然后他们轮流操作(Alice先手),每次操作时从下面的规则中任选一个: ·从某堆石子中取走一个 ·合并任意两堆石子 不能操作的人输.Alice想知道,她是否能有必胜策略. \(\color{#0066ff}{输入格式}\) 第一行输入T,表示数据组数. 对于每组测试数据,第一行读入N. 接下来N个正整数a1,a2-an,表示每堆石子的数量. \(\color{#…
有N堆石子 ·从某堆石子中取走一个 ·合并任意两堆石子 不能操作的人输. 100%的数据满足T<=100,  N<=50. ai<=1000   容易发现基础操作数$d=\sum a_i +n-1$ 没有个数为1的堆还好说,有的话@#$%^&好麻烦啊啊啊啊啊怎么可能找规律 然后看题解,woc记忆化搜索 $f(i,j)$表示i个个数为1的堆,其他操作数为j的胜负态 枚举操作转移就行了,一定要枚举对!注意$j=1$时 #include <iostream> #includ…
[原题] 1874: [BeiJing2009 WinterCamp]取石子游戏 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 334  Solved: 122 [Submit][Status] Description 小H和小Z正在玩一个取石子游戏. 取石子游戏的规则是这种,每一个人每次能够从一堆石子中取出若干个石子,每次取石子的个数有限制,谁不能取石子时就会输掉游戏. 小H先进行操作,他想问你他是否有必胜策略,假设有,第一步怎样取石子. In…
题目描述 有 \(n\) 堆石子,每堆石子的个数是 \(c_i\). Alice 和 Bob 轮流取石子(先后手未定),Alice 每次从一堆中取 \(a\) 个,Bob每次从一堆中取 \(b\) 个.无法操作者输. 你要选定若干堆石子(共 \(2^n\))种情况,问你所有情况中:Alice 必胜的方案数:Bob 必胜的方案数:先手必胜的方案数:后手必胜的方案数. 对 \({10}^9+7\) 取模. \(n\leq 100000\) 题解 要把每堆石子个数对 \(a+b\) 取模. 为什么可以…
Description $N$堆石子, $M$种取石子的方式, 最后取石子的人赢, 问先手是否必胜 $A_i <= 1000$,$ B_i <= 10$ Solution 由于数据很小, 直接暴力求SG函数即可判断. Code #include<cstdio> #include<cstring> #include<algorithm> #define rd read() using namespace std; ; ], b[N]; ]; int read(…
取石子(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于条件有限,他/她们是用旺仔小馒头当作石子.游戏的规则是这样的.设有一堆石子,数量为N(1<=N<=1000000),两个人轮番取出其中的若干个,每次最多取M个(1<=M<=1000000),最先把石子取完者胜利.我们知道,TT和他/她的室友都十分的聪明,那么如果是TT先取,他/她会取得游戏的胜利么?   输入 第一行是一个正整数…
转自PoPoQQQ大佬博客 题目大意:给定n堆石子,两人轮流操作,每个人可以合并两堆石子或拿走一个石子,不能操作者输,问是否先手必胜 直接想很难搞,我们不妨来考虑一个特殊情况 假设每堆石子的数量都>1 那么我们定义操作数b为当前石子总数+当前堆数-1 若b为奇数,则先手必胜,否则后手必胜 证明: 若当前只有一堆,则正确性显然 否则: 若b为奇数,那么先手只需进行一次合成操作,此时操作数会-1,且仍不存在大小为1的堆 因此只需要证明b为偶数时先手必败即可 若先手选择了合成操作,那么操作数-1且不存…
[算法]博弈论+记忆化搜索 [题意]给定n堆石子,两人轮流操作,每个人可以合并两堆石子或拿走一个石子,不能操作者输,问是否先手必胜 [题解] 首先,若所有石子堆的石子数>1,显然总操作数为(石子数+石子堆数-1),奇数先手必胜,偶数先手必败. 若有部分石子堆的石子数=1,情况较复杂,考虑一下五种情形: 1. 拿走石子数=1的石子堆 2.减少操作次数(拿走石子或合并石子堆) 3.操作数减至1时,视为多一堆石子数=1的石子堆(若操作数不为1,即使出现也会被再次操作抵消) 4.合并两个石子数=1的石子…