Description
Input
Output
Sample Input
3
3
1 1 2
2
3 4
3
2 3 5
Sample Output
YES
NO
NO
Data Constraint
Solution
- 直接上题解:
Code
#include<cstdio>
#include<cstring>
#include<cctype>
using namespace std;
const int N=55,M=50005;
bool bz[M][N],f[M][N];
inline int read()
{
int X=0,w=0; char ch=0;
while(!isdigit(ch)) w|=ch=='-',ch=getchar();
while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
return w?-X:X;
}
bool dfs(int x,int y)
{
if(!y) return x&1;
if(x==1) return dfs(0,y+1);
if(bz[x][y]) return f[x][y];
bz[x][y]=true;
if(y && !dfs(x,y-1)) return f[x][y]=true;
if(x && !dfs(x-1,y)) return f[x][y]=true;
if(y>=2 && !dfs(x+2+(x>0),y-2)) return f[x][y]=true;
if(x && y && !dfs(x+1,y-1)) return f[x][y]=true;
return f[x][y]=false;
}
int main()
{
int T=read();
while(T--)
{
int n=read(),s=0,j=0;
for(int i=1;i<=n;i++)
{
int x=read();
if(x==1) j++; else s+=x+1;
}
if(s) s--;
puts(dfs(s,j)?"YES":"NO");
}
return 0;
}