【记忆化搜索】 HDU-4155-The Game of 31
2012-02-25 22:44
501 查看
本题是一道博弈题,虽然之前弄过有关博弈方面的算法,但基本都忘了,所以就用记忆搜索水过了……
思路:开一个八位数组dp[s][a1][a2][a3][a4][a5][a6][d],其中s代表的是31减去之前玩过的卡片加起来的总和的差,a1,a2,a3,a4,a5,a6分别代表1,2,3,4,5,6六个数的张数,d表示当前是谁玩……
思路:开一个八位数组dp[s][a1][a2][a3][a4][a5][a6][d],其中s代表的是31减去之前玩过的卡片加起来的总和的差,a1,a2,a3,a4,a5,a6分别代表1,2,3,4,5,6六个数的张数,d表示当前是谁玩……
#include<iostream> #include<vector> #include<algorithm> using namespace std; int dp[32][5][5][5][5][5][5][2]; int dfs(int s,int a1,int a2,int a3,int a4,int a5,int a6,int d) { int a[2],&ret=dp[s][a1][a2][a3][a4][a5][a6][d]; if(s<0)return d; //如果s小于0就表示上一个人玩的时候就已经不合要求了,所以这种情况赢的就是当前的d if(s==0)return ret=1-d; //s等于0时,表示当前的人没得玩了,所以赢的是d的另一个人就是1-d,并做标记 if(ret!=-1)return ret; //搜过就直接返回,这里是最重要的剪枝,记忆搜索的核心就在这里 a[0]=a[1]=0; if(a1)a[dfs(s-1,a1-1,a2,a3,a4,a5,a6,1-d)]++; if(a2)a[dfs(s-2,a1,a2-1,a3,a4,a5,a6,1-d)]++; if(a3)a[dfs(s-3,a1,a2,a3-1,a4,a5,a6,1-d)]++; if(a4)a[dfs(s-4,a1,a2,a3,a4-1,a5,a6,1-d)]++; if(a5)a[dfs(s-5,a1,a2,a3,a4,a5-1,a6,1-d)]++; if(a6)a[dfs(s-6,a1,a2,a3,a4,a5,a6-1,1-d)]++; if(a[d])return ret=d; //当前有成功的就返回当前的人 else return ret=1-d; } int main() { //freopen("a.txt","r",stdin); int c,i,sum,a[10]; char s[20]; memset(dp,-1,sizeof(dp)); dfs(31,4,4,4,4,4,4,0); while(scanf("%s",s)!=EOF) { memset(a,0,sizeof(a)); sum=31; for(i=0;i<strlen(s);i++) { c=s[i]-'0'; sum-=c; a[c]++; } printf("%s %c\n",s,'A'+dp[sum][4-a[1]][4-a[2]][4-a[3]][4-a[4]][4-a[5]][4-a[6]][i%2]); } return 0; } </span>
相关文章推荐
- HDU 4155 The Game of 31
- HDU 4155 The Game of 31 (博弈)
- hdu 4155 The Game of 31 博弈论
- hdu 4155 The Game of 31
- poj 4155 The Game of 31
- HDOJ 4155 The Game of 31 博弈搜索
- ZOJ1827_The Game of 31
- ZOJ 1827 The Game of 31
- HDU 4839 The Game of Coins _(:зゝ∠)_
- ZOJ1827 HDU4155 The Game of 31,博弈论+爆搜
- The Game of 31 (博弈)
- HDU 4839 The Game of Coins _(:зゝ∠)_
- hdu4155 The Game of 31
- zoj 1827 The Game of 31
- HDU 4839 The Game of Coins _(:зゝ∠)_
- hdu 2444-The Accomodation of Students(二分匹配)
- HDU 3080 The plan of city rebuild(除点最小生成树)
- HDU 3006 The Number of set
- 【HDU】 2444 The Accomodation of Students
- hdu 6138 Fleet of the Eternal Throne 基于kmp算法的求解