1. 程式人生 > >[BZOJ1299][LLH邀請賽]巧克力棒

[BZOJ1299][LLH邀請賽]巧克力棒

https 一起 pre amp clu www. scan spa lin

題目鏈接:

BZOJ1299

首先,第一步只能從其中選一些巧克力棒,那麽就要使這些巧克力棒的\(xor\)和為\(0\)

然後\(X\)就面臨了一個必敗狀態。

\(X\)選擇繼續拿巧克力棒,使\(xor\)和不為\(0\),則\(TBL\)又可以把\(xor\)和吃成\(0\)

\(xor\)和為\(0\),那麽\(TBL\)第一步就可以一起拿出,使\(X\)沒有機會。

那麽就只需要判斷是否有子序列\(Xor\)和為\(0\)

\(DFS\)就好了。

時間復雜度 \(O(10*2^n)\)

#include <cstdio>
 
int n,l[15];
 
bool DFS(int p,int c,int s)
{
    if(c&&!s)return true;
    if(p>n)return false;
    return DFS(p+1,c,s)||DFS(p+1,c+1,s^l[p]);
}
 
int main()
{
    for(register int i=1;i<=10;++i)
    {
        scanf("%d",&n);
        for(int j=1;j<=n;++j)scanf("%d",&l[j]);
        puts(DFS(1,0,0)?"NO":"YES");//輸出是反的。。
    }
    return 0;
}

[BZOJ1299][LLH邀請賽]巧克力棒