博弈论基础:
大概就是定义必败状态和必胜状态:
由某状态能到达必败状态,这样的状态就是必胜状态
反之,某状态只能到达必胜状态,这样地状态就叫必败状态
比如一堆石子拿1,2,3个,谁拿最后一个谁输
那么1个石子就是必败状态。
2,3,4个石子是必胜状态
5个石子是必败状态……这道题性质类似,使用了记忆化搜索,1Y
 1#include <iostream.h>;
 2#include <string.h>;
 3int a[10010];
 4int b[50];
 5int n,m,i,ans;
 6
 7int get(int k){
 8if (a[k]!=0return a[k];
 9int i; a[k]=2;
10for (i=0;i<m;i++)
11if (k-b[i]>=1 && get(k-b[i])==2{a[k]=1break;}
12return a[k];
13}

14
15void main(){
16memset(a,0,sizeof(a));
17a[1]=2;
18cin>>n>>m;
19for (i=0;i<m;i++) cin>>b[i];
20ans=get(n);
21cout<<ans<<"\n";
22}