码迷,mamicode.com
首页 > 其他好文 > 详细

sg值的求解(NIM)

时间:2017-04-16 19:06:57      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:name   clu   硬币   while   namespace   class   游戏   设计   insert   

 

硬币游戏2

挑战程序设计竞赛P315

1堆的情况:

 1 #include<bits/stdc++.h>
 2 int x=9,grundy[1000],k=2,A[1000]={1,4},n=3;
 3 using namespace std;
 4 int main(){
 5     grundy[0]=0;
 6     for(int i=1;i<=9;i++){
 7         set<int>s;
 8         for(int j=0;j<k;j++){
 9             if(i>=A[j]) s.insert(grundy[i-A[j]]);
10         }
11         int g=0;
12         if(s.count(g)!=0) g++;
13         grundy[i]=g;
14     }
15     if(grundy[x]) printf("Alice\n");
16     else printf("Bob\n");
17     
18 } 

n堆的情况:

 1 #include<bits/stdc++.h>
 2 #define MAX_N 1000
 3 #define MAX_K 1000 
 4 #define MAX_X 1000
 5 using namespace std;
 6 int N=3,K=3,X[MAX_N]={5,6,8},A[MAX_K]={1,3,4};
 7 int grundy[MAX_X+1];
 8 int main(){
 9     grundy[0]=0;
10     int max_x=*max_element(X,X+N); 
11     
12     for(int i=1;i<=max_x;i++){
13         set<int>s;
14         for(int j=0;j<K;j++){
15             if(A[j]<=i) s.insert(grundy[i-A[j]]);
16         }
17         int g=0;
18         while(s.count(g)!=0) g++;
19         grundy[i]=g;
20     }
21     
22     int x=0;
23     for(int i=0;i<N;i++) x^=grundy[X[i]];
24     
25     if(x!=0) puts("Alice\n");
26     else puts("Bob\n");
27     return 0;
28 }

 

sg值的求解(NIM)

标签:name   clu   硬币   while   namespace   class   游戏   设计   insert   

原文地址:http://www.cnblogs.com/elpsycongroo/p/6719463.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!