如果這個數是斐波拉契數,那麼先手就敗的情況。
**
#include
#include
int fib[
233]
,x;std::map<
int,
bool
>mp;
intmain()
證明:
比如 有21個石子 (21=13+8) 連續兩個斐波拉契數13+8的和
首先有21個石子,我們肯定是不能讓對手取最後乙個石子的。(顯而易見,不然這樣我們就輸了。)
那麼21可以劃分成21=13+8這兩個數之和,我們肯定不能取》=8的石子,因為這樣後手一下子會取完,
那麼對於8這堆來說,我們也要不讓對手取最後一顆石子,那麼8又可以劃分成8=5+3 連續斐波拉契數之和 ,那麼我們肯定是不能取》=3的石子,因為那樣後手一下子會取完,
那麼對於3這一堆來說,我們也不要讓對手取最後一顆石子,那麼3又可以劃分為3=2+1連續的斐波拉契數之和…
那麼3又可以劃分為3=2+1連續的斐波拉契數之和.,那麼我們肯定不能取》=1的石子…
顯而易見,和題目發生了衝突
我們再來證明如果這個數不是斐波拉契數,那麼先手就贏的情況
根據「zeckendorf定理」(齊肯多夫定理):任何正整數可以表示為若干個不連續的fibonacci數之和。如n=83 = 55+21+5+2。
如果我們先手取掉最小的那堆2的話,那麼對手怎麼也不能把倒數第二堆取完,(因為它們不是連續的斐波拉契!)那麼就轉化成了5個石頭對手先取,5是斐波拉契數怎麼取都是後手拿掉最後乙個(這就轉化成了第一種情況!) 同理21 55 你總能拿掉最後一顆。**
博弈論 斐波那契博弈
1.斐波那契博弈是另種型別的博弈,這種博弈要求的條件是 1 博弈者還是兩個人,n個物品 2 先手在第一次不能取完所有的物品,但是至少取走乙個物品。3 以後的每乙個回合,每次取走的物品至多是上乙個人的兩倍,至少是乙個。4 先取完的人勝利。2.同理,我們在這裡還是要研究先手的必勝和必敗態。在斐波那契博弈...
斐波那契博弈
斐波那契博弈 有一堆物品,兩人輪流取物品,先手最少取乙個,至多無上限,但不能把物品取完,之後每次取的物品數不能超過上一次取的物品數的二倍且至少為一件,取走最後一件物品的人獲勝。結論是 先手勝當且僅當n不是斐波那契數 n為物品總數 如hdu2516 include include include us...
斐波那契博弈?!
有一堆石子有n顆,雙方輪流取石子。先手第一次可以拿至少乙個但是不能拿完 接下來每次取的石子至少為1個,至多為上一次拿的兩倍 問先手是否有必勝策略 觀 da 察 biao 發現先手必敗當且僅當n為斐波那契數?考慮歸納證明 設n是斐波那契數,n a b,a和b為n的前兩個斐波那契數 設先手拿的石子數量為...