uva 10404 Bachet's Game

来源:互联网 发布:安卓smali转java 编辑:程序博客网 时间:2024/05/16 07:26

题意:给你n个石头,有m种拿石头的方法,问是先手胜,还是后手胜。

用一个数组dp[i]表示当前的状态是必胜态还是必败态。设0表示必败,那么dp[0]=0,如果当前状态可能到达一个为0的状态,那么当前这个状态就是必胜态,因为为0的状态只可能是是全部为1的状态推来,即全部是必胜态推出。

#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N=1000005;bool dp[N];int data[19];int main(){    int n,m;    while(scanf("%d%d",&n,&m)!=EOF)    {        for(int i=0;i<m;i++) scanf("%d",&data[i]);        dp[0]=0;        for(int i=1;i<=n;i++)        {            dp[i]=0;            for(int j=0;j<m;j++)            {                if(i-data[j]>=0&&dp[i-data[j]]==0)                {                    dp[i]=1;                    break;                }            }        }        if(dp[n]) puts("Stan wins");        else puts("Ollie wins");    }    return 0;}


原创粉丝点击