UVA 10404 - Bachet's Game

用一个bool数组d,stan和ollie每次取石头时都要想办法让对方输,所以当剩下的石头i

,当i大于 a[j] 时,他们都会想办法使对方陷入失败,即使得d[ i - a[j] ]为false。直到取

完所有的石头,d[N]为true就是先取的人赢。

#include<stdio.h>
#include<string.h>
#define MAXN 1000005
#define MAXM 15
int N, M, a[MAXM];
bool d[MAXN];

void init()
{
for( int i = 0; i <= N; i ++)
{
d[i] = false;
}
scanf( "%d", &M);
for( int i = 0; i < M; i ++) {
scanf( "%d", &a[i]);
}
}

void dp()
{
for( int i = 0; i <= N; i ++)
{
for( int j = 0; j < M; j ++)
if( i - a[j] >= 0 && !d[ i - a[j]])
{
d[i] = true;
break;
}
}
}

int main()
{
while( scanf( "%d", &N) == 1)
{
init();
dp();
if( d[N])
printf( "Stan wins\n");
else
printf( "Ollie wins\n");
}
return 0;
}


 

你可能感兴趣的:(game)