记忆化搜索,数据太水,1<=h<=10000,但数组开100也能过。
STL的东西真不能用,太慢,用STL并且在搜索的函数里开10000的数组就RE了,用数组写的并且在搜索的函数里开10000的数组就A了。。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include <set>
#include <string>
#include <vector>
using namespace std;
int s[1000],cnt;
int sg[11500];
int cal(int x)
{
if(sg[x]!=-1)
return sg[x];
bool f[11500];
memset(f,0,sizeof(f));
for(int i=1;i<=cnt;++i)
if(x-s[i]>=0)
{
int tt=cal(x-s[i]);
f[tt]=true;
}
for(int i=0;i<=10001;++i)
if(!f[i])
return sg[x]=i;
}
int main ()
{
int k,m,l,temp;
while(scanf("%d",&k)!=EOF)
{
if(k==0) break;
cnt=0;
for(int i=1;i<=k;++i)
{
scanf("%d",&m);
s[++cnt]=m;
}
memset(sg,-1,sizeof(sg));
sg[0]=0;
string ans="";
scanf("%d",&m);
for(int i=1;i<=m;++i)
{
scanf("%d",&l);
int res=0;
while(l--)
{
scanf("%d",&temp);
res=res^cal(temp);
}
if(res)
ans+="W";
else ans+="L";
}
cout<<ans<<endl;
}
return 0;
}