这是编程竞赛中的问题,我“发现”了如何在 2 人游戏中通过状态。
问题是:在两个玩家 A 和 B 之间进行另一种游戏,其中 A 总是先开始,从给定的矩阵中选择一些字母并从给定的字典中造词。然后丢弃这些字母。下一位玩家从剩下的字母中选择。最后一个说不出话的人就输了。每场比赛都发挥得淋漓尽致。
从 我在这里引用的社论
To iterate over all non-empty subsets of the given
set when they represented using bitmasks:
submask = mask
while submask > 0
// do the job with the submask
submask = (submask - 1) AND mask
在我看到的一个解决方案中
int solve(int state)
{
if(dp[state]!=-1)
return(dp[state]);
int res=1;
int nstate=state;
while(1)
{
if(valid[nstate])
res=solve(state&(~nstate));
if(res==0)
break;
nstate=((nstate-1)&state);
if(nstate==0)
break;
}
if(res==0)
dp[state]=1;
else
dp[state]=0;
return(dp[state]);
}
此代码有另一个与 ~ 的 AND。
我实际上无法理解这里的“状态”是什么,以及它如何将我们带入所有状态?请解释一下。