uva--10404Bachet's Game+dp

来源:互联网 发布:overture 5 for mac 编辑:程序博客网 时间:2024/05/18 13:30

递推式dp。令dp[i]表示剩余i个石子时候的状况,dp[i]=1表示Stan必赢,dp[i]=0表示Stan必输;

状态转移:对于dp[i],如果前面有一个可达状态是必输的则dp[i]=1,否则dp[i]=0;


代码如下:


<span style="font-size:18px;">#include<iostream>#include<cstdio>#include<cstring>using namespace std;int dp[1100000];int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        int m;        scanf("%d",&m);        int a[20];        for(int i=0;i<m;i++)            scanf("%d",&a[i]);        memset(dp,0,sizeof(dp));        for(int i=1;i<=n;i++)        {            for(int j=0;j<m;j++)            {                if(i-a[j]>=0&&!dp[i-a[j]])                {                    dp[i]=1;                    break;                }            }        }        if(dp[n])            printf("Stan wins\n");        else            printf("Ollie wins\n");    }  return 0;}</span>


0 0
原创粉丝点击