威佐夫博弈、黄金分割、POJ 1067
来源:互联网 发布:ssh连接阿里云 编辑:程序博客网 时间:2024/06/06 02:57
题目链接:http://poj.org/problem?id=1067
题解:
有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,
规定每次至少取一个,多者不限,最后取光者得胜。
如下三条性质:
奇妙的是其中出现了黄金分割数(1+√5)/2 = 1。618...,因此,
由ak,bk组成的矩形近似为黄金矩形,由于2/(1+√5)=(√5-1)/2,
可以先求出j=[a(√5-1)/2],若a=[j(1+√5)/2],那么a = aj,bj = aj + j,
若不等于,那么a = aj+1,bj+1 = aj+1+ j + 1,若都不是,那么就不是奇异局势
。然后再按照上述法则进行,一定会遇到奇异局势。
Beatty定理(不知道的参见:http://baike.baidu.com/view/857235.htm)有:
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
}
转载:http://blog.sina.com.cn/s/blog_8d1ecec901012wgw.html
**************************************************
//下面的内容来自chengmingvictor
先找规律,算几个很小的必败状态
1,2
3,5
4,7
6,10
8,13
...
发现所有的数恰在序列中出现一次
而且差为1,2,3,4,5,...
所以这两个序列构成正整数集的一个分划,猜想可以由betty定理生成(仅仅是猜想,不需要
太多的理由^_^)
其实,这两个序列恰好对应betty定理中alpha=(1+sqrt(5))/2,beta=(3+sqrt(5))/2的情况,
所以问题解决。
这题不算出公式的话是没法做的,因为规模太大,必败状态太多,没有任何的办法
betty定理是说,如果无理数alpha和beta满足
1.alpha,beta>0
2.1/alpha+1/beta=1
那么,序列{[alpha*n]}和{[beta*n]}构成自然数集的一个分划,其中[]是取整函数
这道题对应的alpha和beta分别是(1+sqrt(5))/2,(3+sqrt(5))/2
所以alpha=1/黄金分割
beta/alpha=黄金分割
可以说跟黄金分割有关,但也只是一种巧合吧,黄金分割还是经常出现的
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
}
- 威佐夫博弈、黄金分割、POJ 1067
- poj 1067 威佐夫博弈
- ACM: 博弈题 poj 1067
- poj 1704 阶梯尼姆博弈
- ACM: 博弈题 poj 1143 状态压缩
- [威佐夫博弈 黄金分割比 数学技巧] POJ 1067 取石子游戏 & HDU 1527 取石子游戏
- poj 2488
- POJ 2485 Highways
- POJ 3299
- poj 1905
- HODJ 4111 Alice and Bob(博弈)
- POJ 2247 Humble Numbers
- POJ 1753 Flip Game
- POJ 1182 食物链
- POJ 3185 The Water Bowls
- POj 2379 ACM Rank Table
- POJ 1018 Communication System
- POJ 1050 To the Max
- Python批量添加库搜索路径
- HDOJ 1999 不可摸数
- POJ题目分类
- 由poj 1067引发的——取石子游…
- 如何写出很牛的代码,提高你的代码…
- 威佐夫博弈、黄金分割、POJ 1067
- java提高篇(十七)-----异常(二)
- POJ3687Labeling Balls 解题思路加感受
- swap函数
- HDOJ 1262 寻找素数对
- 几点建议,让Redis在你的系统中发挥更大作用
- HDOJ 1597 find the nth digit
- HDOJ 4342 History repeat itse…
- Lucas定理 && HODJ 4349