看了大牛的门的思路才水过的...罪过.....
dp指使必胜还是必败
只有能转化成0状态的是必胜
#include<stdio.h>
#include<string.h>
/*
这么想:如果dp[i]==1那么说明棋子个数为i的时候可以获胜,那么加上集合中的元素也可以获胜
*/
int dp[1000000];
int set[10];
int cardinary;
long num;
void ini()
{
for(int i=0;i<1000000;++i)
{
dp[i]=0;
}
dp[0]=0;
}
void solve()
{
while(scanf("%ld",&num)!=EOF)
{
ini();
scanf("%d",&cardinary);
for(int i=0;i<cardinary;++i)
{
scanf("%d",&set[i]);
}
for(int i=0;i<=num;++i)
{
for(int j=0;j<cardinary;++j)
{
if(i-set[j]>=0&&dp[i-set[j]]!=1)
{
dp[i]=1;
break;
}
}
}
if(dp[num]==1)
{
printf("Stan wins\n");
}
else
{
printf("Ollie wins\n");
}
}
}
int main()
{
solve();
return 0;
}