参考博客:https://blog.csdn.net/strangedbly/article/details/51137432
hdu 1536
#include<iostream> #include<cstdio> #include<string> #include<algorithm> using namespace std; const int maxn=110,maxm=10000+10; int n; int s[maxn],sg[maxm]; int getsg(int x) { if(sg[x]!=-1)return sg[x]; bool vis[maxn]; for(int i=0;i<maxn;i++)vis[i]=0; for(int i=1;i<=n;i++) { if(s[i]<=x) { getsg(x-s[i]); vis[sg[x-s[i]]]=1; } } for(int i=0;;i++) if(vis[i]==0) return sg[x]=i; } int main() { int m; while(scanf("%d",&n)==1) { if(n==0)break; for(int i=1;i<=n;i++) scanf("%d",&s[i]); for(int i=0;i<maxm;i++)sg[i]=-1; scanf("%d",&m); sg[0]=0; for(int i=1;i<=m;i++) { int ans=0; int k; scanf("%d",&k); for(int j=1;j<=k;j++) { int gg; scanf("%d",&gg); ans^=getsg(gg); } if(ans!=0)printf("W"); else printf("L"); } cout<<endl; } return 0; }