poj2068--Nim

Posted GFY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj2068--Nim相关的知识,希望对你有一定的参考价值。

题意:给你2n个人,两方各n个人,交叉坐,每个人可以取的石子有一个最大限制,总共有S颗石子,哪一方取了最后一颗石子就输了,问先取石子的这一方是否有必胜策略。

DP,dp[i][j]代表第i个人还有J个石子没有取得状态。记忆化搜索

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<string>
 6 #include<algorithm>
 7 int dp[22][9005],s,n,a[9005];
 8 int dfs(int x,int f){
 9     if (dp[x][f]!=-1) return dp[x][f];
10     for (int i=1;i<=a[x];i++){
11         int t=f-i,y;
12         if (t<0) break;
13         if (x+1>=2*n) y=0;else y=x+1;
14         if (dfs(y,t)==0) return dp[x][f]=1;
15     }
16     return dp[x][f]=0;
17 }
18 int main(){
19     while (scanf("%d",&n)&&n){
20         scanf("%d",&s);
21         for (int i=0;i<2*n;i++)
22          scanf("%d",&a[i]);
23         memset(dp,-1,sizeof dp);
24         for (int i=0;i<2*n;i++) dp[i][0]=1; 
25         int ans=dfs(0,s);
26         if (ans) printf("1\n");
27         else printf("0\n");
28     }
29 }

 

以上是关于poj2068--Nim的主要内容,如果未能解决你的问题,请参考以下文章

poj2068--Nim

poj2068Nim

POJ 2068 Nim (dp博弈)

POJ2778DNA Sequence(AC自动机)

POJ3691DNA repair(AC自动机,DP)

18.06.03 POJ 4126:DNA 15年程设期末05(状压DP)