博弈论 sg函数
来源:互联网 发布:三国杀 银两武将 知乎 编辑:程序博客网 时间:2024/05/24 04:13
http://baike.baidu.com/link?url=RvHq88XaFKNd0XJC97k2JWvIJSPZiLKvVhVnA_yCPR_K-cZhb2lLIjG3XHatW8VeyzLxbbOvYWqEtcc2RSdls_7mPQDbixegyJFRIBJFdj_
http://www.cnblogs.com/frog112111/p/3199073.html
两人操控一个棋子要从起点到终点,每次可以走若干步(看下边的三种规则),谁无路可走谁就输。
对于一个子游戏(之所以说是子游戏,是因为情况可能不止一个棋子,比如两人操作两个棋子。可以认为一个棋子是一个子游戏。而总游戏的胜利为各个子游戏的sg的异或)(sg[i]为0为必败点,不为0为必胜点)
三种规则
1.每次可以走任意步,那么sg[i] = i,
2.每次可以走1~m步,那么sg[i] = i%(m+1),
3对于不连续的步数。下面的函数。
#include<vector>#include<iostream>using namespace std;vector<int> sg(20);vector<int> f = {0,1,2,5};//每次可以走的步数,这里设为1,2,,5。f[0]无意义。std::vector<int> hash0(20);//找到mex({sg[当前步数减去可以走的步数}),最小非负整数void getsg(int n){for(int i=0; i<sg.size(); i++) sg[i] = 0;for(int i=1; i<=n; i++){for(int i=0; i<hash0.size(); i++) hash0[i] = 0;for(int j=1; f[j] <= i; j++){hash0[sg[i-f[j]]] = 1;}for(int j=0; j <=n; j++){if(hash0[j] == 0){sg[i] = j;break;}}cout<<i<<" "<<sg[i]<<endl;} } int main() { getsg(20); return 0; }
0 0
- HDU_1536 博弈论-sg函数
- 博弈论之sg函数
- SG函数(博弈论)
- 博弈论中的SG函数
- 博弈论 (SG函数)
- 博弈论之SG函数
- 博弈论与SG函数
- 博弈论 随记(SG函数)
- 博弈论 SG函数
- 博弈论(sg函数)
- 博弈论 SG函数
- 博弈论SG函数
- 博弈论之sg函数
- 博弈论 sg函数
- 博弈论 SG函数模板
- 博弈论 SG函数
- SG 函数,博弈论
- nim游戏/sg函数(博弈论)
- 深度优先搜索dfs之1到n的全排列
- Redis-集群监控之Redis monitor
- 每日三题-Day2-A(HDU 1074 Doing Homework 状压DP)
- hdu 1326 Box of Bricks
- 关于base64编码的一些理解
- 博弈论 sg函数
- KNN算法理解
- Debug与Release版本的区别详解
- 1017. A除以B
- 【LeetCode101-110】二叉树对称及存储,前序中序遍历生成二叉树,中序后序生成二叉树,数组转化为AVL平衡树,判断二叉树是否平衡
- AutoCompleteExtender返回text,value
- 网络请求post get 中文参数报错
- 9个数字组成三个数字使加法等式成立
- List集合之LinkedList