これは、プログラミング コンテストで、2 人用ゲームの状態をどのように通過するかを「見つけた」問題です。
問題は次のとおりです。A と B の 2 人のプレイヤーの間で、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
私が見た解決策の1つで
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 があります。
ここで実際に「状態」が何であるか理解できません。これと、どのようにしてすべての状態を通過できるのでしょうか? これを説明してください。