SG定理:

根据Sprague-Grundy定理(SG定理),对于某些博弈论问题可以这样思考:

首先可以确定一个必败状态(记为P)或必胜状态(记为N);

这样一来,若某一状态X若 可以 直接转移到P,则可以确定X为必胜状态;

若某一状态X 只能 转移到N,则可以确定X为必败状态。

以此通过递推可确定先手必胜或必败。

题一:hdu1404

代码:

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int maxn = 1e7+6;
bool sg[maxn]; int intlen(int x)
{
for (int i=6;i>0;i--)
{
int k=pow(10,(i-1));
if (x / k) return i;
}
} void GetSG(int x)
{
//cout<<x<<endl;
int len=intlen(x);
for(int i=0; i<len; ++i)
{
int k=pow(10, i);
int q=x/k%10;
int y=x;
for(int j=q; j<9; ++j)
{
y+=k;
sg[y]=true;//可一步到达必败状态则为必胜
}
}
int y=x, k=1;
while(len<6)
{
y*=10;
for(int i=0; i<k; ++i)
sg[y+i]=true;
k*=10;
len++;
}
} int main()
{
memset(sg, false, sizeof(sg));
sg[0]=true;
for(int i=1; i<1000000; ++i)
if(!sg[i])//必败则进入
GetSG(i);
char n[10];
while(gets(n))
{
if(n[0]=='0')
{
puts("Yes");
continue;
}
int m=atoi(n);
if(sg[m]) puts("Yes");
else puts("No");
}
return 0;
}

题二:hdu1404

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std; int main()
{
long long n;
while(cin>>n)
{
int x=0;
for(; n>1; ++x)
{
if(x&1)
n = ceil(n*1.0/2);
else
n = ceil(n*1.0/9);
}
if(x&1) puts("Stan wins.");
else puts("Ollie wins.");
}
return 0;
}

hdu1404,hdu1517 (博弈论入门)的更多相关文章

  1. 博弈论入门之nim游戏

    更好的阅读体验点这里 nim游戏 nim游戏 有两个顶尖聪明的人在玩游戏,游戏规则是这样的: 有\(n\)堆石子,两个人可以从任意一堆石子中拿任意多个石子(不能不拿),没法拿的人失败.问谁会胜利 ni ...

  2. 洛谷P3150 pb的游戏(1)题解 博弈论入门

    题目链接:https://www.luogu.org/problem/P3150 这道题目是博弈论的入门题. 我们以 必胜态 和 必败态 来讲解这个问题. 首先,下面的图片演示了前8个数的必胜态和必败 ...

  3. 博弈论入门——Nim游戏引入

    说实话,我真的对这个游戏看得是一脸懵逼,因为(我太弱了)我没有明白一些变量的意思,所以一直很懵,现在才明白,这让我明白博弈论(还可以骗钱)博大精深; 以下是我自己思考的过程,也许不严谨,但是最终明白了 ...

  4. 博弈论入门小结 分类: ACM TYPE 2014-08-31 10:15 73人阅读 评论(0) 收藏

    文章原地址:http://blog.csdn.net/zhangxiang0125/article/details/6174639 博弈论:是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策 ...

  5. [您有新的未分配科技点]博弈论入门:被博弈论支配的恐惧(Nim游戏,SG函数)

    今天初步学习了一下博弈论……感觉真的是好精妙啊……希望这篇博客可以帮助到和我一样刚学习博弈论的同学们. 博弈论,又被称为对策论,被用于考虑游戏中个体的预测行为和实际行为,并研究他们的应用策略.(其实这 ...

  6. 随手练——博弈论入门 leetcode - 486. Predict the Winner

    题目链接:https://leetcode.com/problems/predict-the-winner/ 1.暴力递归 当前数组左边界:i,右边界:j: 对于先发者来说,他能取到的最大值是:max ...

  7. 博弈论入门 Bash 、Nim 、Wythoff's Game结论及c++代码实现

    SG函数先不说,给自己总结下三大博弈.和二进制及黄金分割联系密切,数学真奇妙,如果不用考试就更好了. 1.Bash Game:n个物品,最少取1个,最多取m个,先取完者胜. 给对手留下(m+1)的倍数 ...

  8. 博弈论入门题 kiki's game

    Problem Description Recently kiki has nothing to do. While she is bored, an idea appears in his mind ...

  9. 洛谷P1488 肥猫的游戏 题解 博弈论入门

    题目链接:https://www.luogu.org/problem/P1488 其实这道题目我只需要 \(n\) 以及黑色三角形的三个端点编号就可以了. 我们假设在一个 \(n\) 边形中,黑色三角 ...

随机推荐

  1. JVM运行时数据区--堆

    一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器.本地方法栈和虚拟机栈. 核心概述 1.一个jvm实例只存在一个堆内存,堆也是java内 ...

  2. SSO单点登录可以自己实现吗?--开源软件诞生10

    ERP与SSO的恩怨情仇--第10篇 用日志记录“开源软件”的诞生 赤龙 ERP 开源地址: 点亮星标,感谢支持,与开发者交流 kzca2000 码云:https://gitee.com/redrag ...

  3. 文件存到aws的S3后, 调用getimagesize失败分析

    一.问题 将图片在windows下用图片查看器修改后,上传到s3中,调用getimagesize获取图片信息总是返回false,其它图片正常: 代码如下: $fileName = 's3://sdk1 ...

  4. spring cloud微服务快速教程之(十四)spring cloud feign使用okhttp3--以及feign调用参数丢失的说明

    0-前言 spring cloud feign 默认使用httpclient,需要okhttp3的可以进行切换 当然,其实两者性能目前差别不大,差别较大的是很早之前的版本,所以,喜欢哪个自己选择: 1 ...

  5. SSTI服务器模板注入(以及关于渲染,solt的学习)&&[BJDCTF2020]The mystery of ip 1

    ssti服务器模板注入 ssti:利用公共 Web 框架的服务器端模板作为攻击媒介的攻击方式,该攻击利用了嵌入模板的用户输入方式的弱点.SSTI 攻击可以用来找出 Web 应用程序的内容结构. slo ...

  6. 2019.8.13 sdfzoier

    lxy: lixf acwing上的118,126 zhangtingyu zhaosirui wujialin

  7. 大数据平台Hadoop集群搭建

    一.概念 Hadoop是由java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心部件是HDFS与MapReduce.HDFS是一个分布式文件系统,类似mogilef ...

  8. java调用matlab生成exe文件

    一.Matlab生成Java Package 1.在MATLAB的Command Window输入deploytool命令,选择Library Compiler. 2.在弹出的窗口选择Java Pac ...

  9. 微信小程序 LBS 能力全面解析

    分享之前我们先来看看地图能力在小程序架构体现中所处的位置. 小程序架构图解 如图标黄处为地图能力所处的一个位置,举个例子,比如调用定位能力获取用户当前位置的一个流程: 首先调用 JS API wx.g ...

  10. 03 以Hello World为例,分析C语言的最小的程序结构

    C程序主要包含的部分 预处理器指令 函数 变量 语句 & 表达式 注释 C Hello World 实例 如下程序,可以在屏幕输出短句"Hello World" #incl ...