摘要:
思路:首先用Tarjan算法找出树中的环,环为奇数变为边,为偶数变为点。之后用博弈论的知识:某点的SG值等于子节点+1后的异或和。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 int ans; 9 vectorp[105];10 bool vis[105],inss[105];11 int low[105],dfa[105],num[105][105],ss[105],top;12 void Tarjan(int u,int pre,int d)1 阅读全文
posted @ 2013-09-12 21:58
_随心所欲_
阅读(312)
评论(0)
推荐(0)
摘要:
思路:无向图,走过的点不能在走。dfs搞定……再就是后继中有必败点的为必胜点!代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 int ans; 9 vectorp[1001];10 bool vis[1001];11 int dfs(int n)12 {13 for(int i=0;i<p[n].size();i++){14 if(!vis[p[n][i]]){15 vis[p[n][i]]=1;16 ... 阅读全文
posted @ 2013-09-12 20:52
_随心所欲_
阅读(190)
评论(0)
推荐(0)
摘要:
思路:每次画X之后都会形成2个子游戏,即i-3和n-i-2.代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 int sg[2002]; 9 int getsg(int n)10 {11 if(n=0) return sg[n];13 bool vis[2002]={0};14 for(int i=1;i<=n;i++){15 vis[getsg(n-i-2)^getsg(i-3)]=1;16 }17 ... 阅读全文
posted @ 2013-09-12 20:11
_随心所欲_
阅读(189)
评论(0)
推荐(0)
摘要:
思路:dp[i][j]:第i个人时还剩j个石头。当j为0时,有必胜为1;后继中有必败态的为必胜态!!记忆化搜索下就可以了!代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #define inf 1e9 8 using namespace std; 9 int dp[22][10000],n,a[22];10 int dfs(int d,int s)11 {12 if(dp[d][s]!=-1) return dp[d][s];13 if(s==0) return dp[d][s]... 阅读全文
posted @ 2013-09-12 18:22
_随心所欲_
阅读(284)
评论(0)
推荐(0)
摘要:
思路:这题和博弈论的关系不大,主要是DP。记忆化搜索即可!!!取的数一定是大于0的,所以将负数去掉!!代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #define inf 1e9 8 using namespace std; 9 int dp[10005],n,a[10005],l,r;10 int dfs(int m)11 {12 if(dp[m]!=inf) return dp[m];13 int ans=inf;14 for(int i=m+1;i=l&&a[i]... 阅读全文
posted @ 2013-09-12 17:01
_随心所欲_
阅读(278)
评论(0)
推荐(0)
摘要:
思路:SG函数应用!!代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int sg[1001],n; 8 vectorp[1001]; 9 int dfs(int now)10 {11 if(sg[now]!=-1) return sg[now];12 bool vis[1001]={0};13 for(int i=0;i<p[now].size();i++)14 vis[dfs(p[now][i])]=1;15 int i... 阅读全文
posted @ 2013-09-12 14:01
_随心所欲_
阅读(362)
评论(0)
推荐(0)
摘要:
思路:求SG函数!!代码如下: 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int sg[202][202]; 7 int getsg(int m,int n) 8 { 9 if(sg[m][n]!=-1) return sg[m][n];10 bool vis[200];11 memset(vis,0,sizeof(vis));12 for(int i=2;i>m>>n) puts(getsg(m,n)?"WIN":"LOSE");23 re 阅读全文
posted @ 2013-09-12 13:12
_随心所欲_
阅读(186)
评论(0)
推荐(0)

浙公网安备 33010602011771号