日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ACM-ICPC中博弈论的一些小小总结

發布時間:2023/12/3 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ACM-ICPC中博弈论的一些小小总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

博弈論

參考

[1]https://blog.csdn.net/clover_hxy/article/details/53818624
[2]https://blog.csdn.net/foreyes_1001/article/details/82862324
[3]https://www.cnblogs.com/lxm940130740/p/3268803.html

一.尼姆博弈


問題提出

下面給出Nim游戲的三種變體

  • 現有nnn堆石子,每人每次可以從其中選出一堆,取1≤x≤k1 \le x \le k1xk顆石子,最后一人取完獲勝,如何判斷先手必勝還是必敗?
  • 現有nnn堆石子,每人每次可以從其中選出至多kkk堆,每堆中可以取任意顆石子,最后一人取完獲勝,如何判斷先手必勝還是必敗?
  • 現有nnn堆石子,沒人每次可以從選111堆,并從這一堆中取任意數量的石子,最后一人取完失敗,如何判斷先手必勝還是必敗?
  • 其中第333種情況也被叫做anti?nimanti-nimanti?nim游戲.

    解決方法

  • 這種變體比較簡單,只需要把每一堆的石子個數模上k+1k+1k+1,然后當成一般的NimNimNim游戲來玩即可.
    因為必勝態的一方總可以將敗方操作的使得模數改變的一堆再改變回來.例如AliceAliceAlice改變了某一堆得石子使得模數從x1?>x2x_1 ->x_2x1??>x2?了,而如果當前堆得石子個數仍然≥k+1\ge k+1k+1,那么BobBobBob可以取k+1?(x1?x2)k+1-(x_1-x_2)k+1?(x1??x2?)個,使得模數重回x1x_1x1?.
    當然也可以這樣解釋,每堆石子當做是一個獨立的游戲,而每個獨立游戲的SGSGSG函數計算方法為SG(x)=x%(m+1)SG(x) = x \% (m+1)SG(x)=x%(m+1)

  • 這種變體相對復雜一些,但解決方案也很簡單,就是將每堆石子的個數以二進制的形式表示,并統計每一位上為111的石子堆個數sumsumsum,如果每一位統計的個數sumsumsum都可以被k+1k+1k+1整除,那么先手必敗,否則先手必勝.
    這個證明起來相對復雜一些.
    [1]從每一位的sum%(k+1)=0sum \% (k+1) = 0sum%(k+1)=0的狀態,一定會轉移到有一位sum%(k+1)≠0sum \% (k+1)\ne 0sum%(k+1)??=0的狀態:這是因為最多可以對kkk堆石子進行操作,而每次操作至少使得一堆的某一位二進制位受到影響.在這一位上最多只能改變kkk堆,因為這一位的sumsumsum一定不會被k+1k+1k+1整除.
    [2]從sum%(k+1)≠0sum \% (k+1) \ne 0sum%(k+1)??=0的狀態一定可以轉移到任何一位sum%(k+1)=0sum\%(k+1)=0sum%(k+1)=0的狀態:我們從高位向低位考慮,假設之前考慮的所有位都已經滿足條件,且操作了1≤m≤k1\le m \le k1mk堆(由于這mmm堆的高位二進制已經被操作過了,所以這m堆低位的二進制位我們可以隨意改變).我們當前位的sumsumsum(sumsumsum即除掉之前操作的mmm堆,剩下的堆中該二進制位為111的統計個數):(1)如果sum≤k?msum \le k-msumk?m,顯然可以將這些111位全部置位000,m=m+summ= m + summ=m+sum.(2)如果sum>k?msum \gt k-msum>k?m,則我們從m堆中選取k+1?summ堆中選取k+1-summk+1?sum堆置為111,mmm堆剩下的置為000即可,著一定是可行的,因為k+1?sum≤mk+1-sum \le mk+1?summ.

  • anti?nimanti-nimanti?nim博弈我們只需要記住兩個必勝態的條件就可以了,詳細證明可以看參考博客.
    [1]當石子個數全部為111,且nim=0nim = 0nim=0時.
    [2]當至少有一堆石子個數大于111nim≠0nim \ne 0nim??=0時.


  • 二.轉化為NIM博弈

    問題提出

    一個100?100100*100100?100的棋盤,坐標范圍是[0,100][0, 100][0,100]的,上面有n個棋子。Alice 和 Bob輪流操作,每次操作可以把一枚棋子向左或者向下或者向斜下方移動任意步,也就是(x,y)(x,y)(x,y)有這三種移動(x?l,y),(x,y?l),(x?l,y?l)(x-l, y), (x, y-l), (x-l, y-l)(x?l,y),(x,y?l),(x?l,y?l)。多個棋子可以同時在同一位置。第一個把棋子移動到(0,0)(0, 0)(0,0)點的人獲勝。 問是否先手必勝。

    解決方法

    這并非直接的NimNimNim游戲,因為NimNimNim游戲中必勝態的定義是最后一個人將棋子移動到(0,0)(0,0)(0,0),而這個游戲中要求的必勝態是第一個將棋子移動到(0,0)(0,0)(0,0)的人獲勝.
    假設一開始所有的棋子都不在(0,x),(x,0),(x,x)(0,x),(x,0),(x,x)(0,x),(x,0),(x,x)這三條直線之一,否則這個人必勝.
    如果某個人將棋子移動到(0,x),(x,0),(x,x)(0,x),(x,0),(x,x)(0,x),(x,0),(x,x)中任意一條直線上,那么這個人將失敗,因此他絕對不可以將棋子移動到這三條直線中去.因此,每個棋子的可移動范圍相當于增加了一個限制.實際上也就是棋子的sgsgsg函數計算方法改變了.當一方不能移動棋子的時候,便輸了.這也就通過改變sgsgsg函數計算方法成功轉化成為經典的NimNimNim博弈了.


    三.巴什博弈

    問題提出

    只有111堆石子,每次至多取kkk個,至少取111個,最后一個取完獲勝.

    解決方法

    如果石子數能被k+1k+1k+1整除,則先手必敗,否則必勝.
    這是顯然的因為模數為000,無論取多少個都會使得模數不為000.而模數為t>0t > 0t>0時候,只要下一個人取走ttt就會使得模數重回000.

    上述NimNimNim博弈中的第一個問題可以看成是巴什博弈和NimNimNim博弈的結合.


    四.階梯尼姆游戲

    問題提出

    在一個階梯上,每層有若干個石子,每次可以將某一層中若干個石子移動到他下一層階梯中去.問先手是否必勝.

    解決方案

    我們可以認為從奇數階梯移動到偶數階梯相當于是把石子從奇數階梯拿走.這樣就轉化為了奇數堆的取石子游戲.
    對于從偶數階梯拿走到奇數階梯的石子,我們可以對稱地從那個奇數階梯中拿走相等的石子到下一個偶數階梯中去,相當于抵消掉了從偶數階梯拿石子的操作.因為每個奇數階梯下都有一個偶數階梯,因此可以保證我們的操作總是可以進行.


    五.取走-分割游戲

    問題提出

    這類游戲允許取走若干東西,也允許將原來的一個游戲分隔成為幾個游戲.
    例:定義有如下操作的游戲:
    [1]從一堆中取走任意個數的石子.
    [2]將一堆石子分成兩堆不為空的石子.

    解決方案

    這類問題也容易解決,只要稍微注意一下sgsgsg函數的計算即可,最后求NimNimNim和即可.
    例如sg(5)sg(5)sg(5)的后繼有
    sg(0),sg(1),sg(2),sg(3),sg(4),sg(1)?sg(4),sg(2)?sg(3)sg(0),sg(1),sg(2),sg(3),sg(4),sg(1) \bigoplus sg(4),sg(2)\bigoplus sg(3)sg(0),sg(1),sg(2),sg(3),sg(4),sg(1)?sg(4),sg(2)?sg(3)
    在這些后繼中找最小的未出現過的自然數,即sg(5)sg(5)sg(5)的值.

    小結論:對于所有的k≥0k \ge 0k0,有g(4k+1)=4k+1;g(4k+2)=4k+2;g(4k+3)=4k+4;g(4k+4)=4k+3g(4k+1)=4k+1;g(4k+2)=4k+2;g(4k+3)=4k+4;g(4k+4)=4k+3g(4k+1)=4k+1g(4k+2)=4k+2g(4k+3)=4k+4g(4k+4)=4k+3


    六.尋找必敗態解題

    問題描述

    nnn堆石子,每次可以選定一堆石子,取走任意顆,然后從該堆剩下的石子中取走任意顆放在任意未取完的堆中,無法操作的人失敗.

    解決方案

    [1]當000堆時顯然必敗.
    [2]當只有111堆時,顯然必勝.
    [3]當只有222堆時,如果全都相等,那么必敗,否則必勝.
    [4]當只有333堆時,必勝,因為總可以操作數量最多的石子堆,使得只剩下兩堆且石子個數相同.
    [5]當只有444堆時,如果有有兩組各個組內石子數相同的情況,則必敗,否則必勝.因為四堆兩兩相同的情況下,要么轉移到333堆(必勝態),要么轉移成四堆不存在兩兩相同,而此時,對方總可以再轉移到四堆兩兩相同的情況.

    規律:偶數堆,且可以分成n2\frac{n}{2}2n?組組內兩兩相同的情況必敗.其他情況必勝.

    證明:只要證明必勝態總可以轉移到必敗態以及必敗態無論如何都會轉移到比必敗態即可,證明相對來說較為容易.

    另一個問題 Wannafly H.樹鏈博弈

    給出一顆樹,樹上的節點非黑即白,每次可以選定一個黑色結點將其變白,并且從該黑色結點到根的路徑上所有點的顏色都可以任意設置.給出必勝局態的策略.

    問題解答

    [1]當只有根節點黑色時候,先手必勝
    [2]當有333個節點的樹,兩個葉子節點為黑色時候,根節點為白色的時候,先手必敗.
    [2]當有333個節點的樹,兩個葉子節點為黑色時候,根節點為黑色的時候,先手必勝.

    我們可以猜測,任意深度的黑色結點個數為偶數的時候,必敗,其他狀態都是必勝態.

    證明:
    [1]當存在深度為xxx的黑色結點個數為奇數時,這是個必勝態.因為我們取(最大的xxx)層的一個黑色節點,將其設置為白色.并且沿路改變路徑上點的顏色,總能使得所有深度下,黑色結點的個數為偶數.證明了必勝態總有一種方法可以轉移到必敗態.
    [2]當所有深度為xxx的黑色結點個數都是奇數時,無論選擇哪個深度的黑色結點將其染白,該層黑色結點的個數將回歸奇數.證明了必敗態無論如何都會轉移到必勝態.
    [3]無法移動的情況即黑色結點個數為000,根據我們的定義滿足必敗態的條件.

    總結

    以上是生活随笔為你收集整理的ACM-ICPC中博弈论的一些小小总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。