1. 程式人生 > >博弈論入門之斐波那契博弈

博弈論入門之斐波那契博弈

斐波那契博弈

斐波那契博弈是一種經典的博弈問題

有一堆石子,兩個頂尖聰明的人玩遊戲,先取者可以取走任意多個,但不能全取完,以後每人取的石子數不能超過上個人的兩倍

結論

斐波那契博弈有一個非常重要的性質:

先手必敗,當且僅當石子數為斐波那契數

是不是很神奇??

證明:

懶得看了,這裡

程式碼

#include<cstdio>
#include<map>
int fib[233],x;
std::map<int,bool>mp;
int main()
{
    fib[1]=1;fib[2]=1;
    for(int i=3;i<=50;i++) fib[i]=fib[i-1]+fib[i-2],mp[fib[i]]=1;
    while(scanf("%d",&x)&&x!=0)
        puts(mp[x]==1?"Second win":"First win");
    return 0;
}

相關推薦

博弈論入門博弈

斐波那契博弈 斐波那契博弈是一種經典的博弈問題 有一堆石子,兩個頂尖聰明的人玩遊戲,先取者可以取走任意多個,但不能全取完,以後每人取的石子數不能超過上個人的兩倍 結論 斐波那契博弈有一個非常重要的性質: 先手必敗,當且僅當石子數為斐波那契數 是不是很神奇?? 證明: 懶得看了,這裡有 程式碼 #incl

博弈論(巴什博奕,威佐夫博弈,尼姆博弈博弈

一.  巴什博奕(Bash Game):   A和B一塊報數,每人每次報最少1個,最多報4個,看誰先報到30。這應該是最古老的關於巴什博奕的遊戲了吧。 其實如果知道原理,這遊戲一點運氣成分都沒有,只和先手後手有關,比如第一次報數,A報k個數,那麼B報5-k個數,那麼B報數之

博弈論-博弈

1.斐波那契博弈是另種類型的博弈,這種博弈要求的條件是(1):博弈者還是兩個人,n個物品(2)先手在第一次不能取完所有的物品,但是至少取走一個物品。(3)以後的每一個回合,每次取走的物品至多是上一個人的兩倍,至少是一個。(4)先取完的人勝利。 2.同理,我們在這裡還是要研究先手的必勝和必敗態。在

博弈論 ( 博弈 )——取石子游戲 ( HDU 2516 )

分析: 遊戲規則: ① 先手不能一次取完所有石子 ② 之和每次可以取得的石子數在1~上次對方取的石子數的兩倍之間(閉區間) ③先取完的獲勝 題解: 通過數學歸納法找規律,得出必敗數。 過

取石子遊戲 HDU2516(博弈

裸題 左右 get code span target oid otto HR 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2516 題目: Problem Description 1堆石子有n個,兩人輪流取.先取者第1

題解報告:hdu 2516 取石子遊戲(博弈

csdn 數組 pre lse http 根據 代碼 als names 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2516 Problem Description 1堆石子有n個,兩人輪流取.先取者第1次可以取任意多個,

演算法設計與跳臺階

1. 斐波那契數列 費波那契數列(義大利語:Successione di Fibonacci),又譯為費波拿契數、斐波那契數列、費氏數列。 在數學上,費波那契數列是以遞迴的方法來定義: 當n趨近於無窮大時,後一項與前一項的比值趨近於1.618,因此也叫黃金比例數列。 斐波那契寫書時

Numpy攻略:Numpy常用函式數列

NumPy 是一個 Python 的第三方庫,代表 “Numeric Python”,主要用於數學/科學計算。 它是一個由多維陣列物件和用於處理陣列的例程集合組成的庫。 1.sqrt函式:計算平方根 示例:黃金分割比的計算 程式碼段如下: import numpy #使

Java數列的三種寫法

說明:1,1,2,3,5,8,13,21,34,55,89......這樣是數列稱為斐波那契數列 1、利用遞迴思想處理 public static long method(int num){         if(num <=

演算法數列如何求第n個值與求前n項和?(Java)

斐波那契數列 指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)。 1.題目 1.1.求斐波那契數

java程式設計題數列

下邊的分析是通過Excel表格做出來的,因為不知道它具體生產的情況,所以就一個月一個月的試,最後得到下列的情況 /** * 古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子, * 小兔子長到第三個月後每個月又生一對兔子,假如

博弈證明

斐波那契博弈: 有一堆個數為n的石子,遊戲雙方輪流取石子,滿足: 1)先手不能在第一次把所有的石子取完; 2)之後每次可以取的石子數介於1到對手剛取的石子數的2倍之間(包含1和對手剛取的石子數的2倍)。 約定取走最後一個石子的人為贏家,當n為斐波那契數時,先手必敗;否則先手必勝。

51 Nod 1070 Bash遊戲v4(博弈

這題的證明看不太懂,日後再重做。。。 基準時間限制:1 秒 空間限制:131072 KB 分值: 40 難度:4級演算法題  收藏  關注 有一堆石子共有N個。A B兩個人輪流拿,A先拿。每次拿的數量最少1個,最多不超過對手上一次拿的數量的2倍(A第1次拿時要求不

劍指offer數列(Java實現)

斐波那契數列 NowCoder 題目描述: 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39 ###解題思路: 整體思路:考慮負數,大數,演算法的複雜度,空間的浪費 public class

演算法數列 演算法數列

演算法之斐波那契數列 斐波那契數列 def fib(n): '''裴波那契''' f = [1,1] for i in range(2, n+1): f.append(f[-1]+f[-2])

複雜度分析數列

數列定義 英文名叫Fibonacci sequence,翻譯過來就是斐波那契數列,其特點如下:0 1 1 2 3 5 8 ...,簡單歸納就是F(0)=0,F(1)=1, F(n)=F(n-1)+F(

HDU 2516 取石子游戲 [博弈]

博弈問題 巴士博弈 威爾夫博弈 斐波那契博弈 尼姆博弈 HDUXXX<-點選此處進入連結 公平組合博弈 取石子游戲 Time Limit: 2000/1000 MS (Java/Others)

劍指offer數列

題目描述:大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。 思路:用迴圈,最好不要用遞迴 程式碼: public static int Fibonacci(i

演算法入門數列和演算法的時間複雜度

此處使用三種方式實現斐波那契數列:遞迴、遞推和通項公式。 實現過程如下: #include<cstring> #include<cstdio> #include<iostream> #include<cmath> usin

動態規劃系列專題講義數列

動態規劃系列專題講義專題一:斐波那契數列/*  Name: 動態規劃專題之斐波那契數列   Copyright:  巧若拙 Author:   Date: 22-03-17 08:56  Description: 1755_菲波那契數列描述:斐波那契數列是指這樣的數列: 數列