Nim遊戲(一堆/N堆)-博弈
問題一:
Alice和Bob在玩這樣一個遊戲:給定k個數字a1,a2…ak。一開始,有x個石子,Alice和Bob輪流取石子。每次所取石子的個數一定要在a1~ak中。Alice先取。取走最後一個石子的一方獲勝。當雙方都採取最優策略時,誰會獲勝?題目假定a1~ak中一定有1.
可以看成一堆的Nim遊戲。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 1010
int x,k,a[MAXN];
bool sg[MAXN];
void solve()
{
sg[0]=false;
for(int j=1; j<=x; ++j)
{
sg[j]=false;
for(int i=0; a[i]<=j&&i<k; ++i)
if(!sg[j-a[i]])
sg[j]|=!sg[j-a[i]];
}//a|=b的意思就是把a和b按位或然後賦值給a
if(sg[x]) puts("Alice");//先手必勝
else puts("Bob");
}
int main()
{
cin>>x>>k;
for(int i=0; i<k; ++i)
cin>>a[i];
solve();
return 0;
}
/*
9
2
1 4
*/
問題二:
Alice和Bob在玩這樣一個遊戲:給定k個數字a1,a2…ak。一開始,有n堆石子,每堆各有xi個石子。Alice和Bob輪流從其中某一堆取一些石子。每次所取石子的個數一定要在a1~ak中。Alice先取。取光石子的一方獲勝。當雙方都採取最優策略時,誰會獲勝?題目假定a1~ak中一定有1.
可以看成N堆的Nim遊戲。
#include<iostream>
#include<cstdio>
#include<set>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 1010
int n;//n堆
int k;//可取情況的數目
int x[MAXN];//n堆分別的數目
int a[MAXN];//可取情況
int sg[MAXN];//等價於Nim中的石子數
void solve()
{
sg[0]=0;//輪到自己還剩0枚時是必敗態
int Max=*max_element(x,x+n);
for(int i=1; i<=Max; ++i)
{
set<int>s;//儲存當前所能到達狀態的sg值
for(int j=0; j<k; ++j)
if(a[j]<=i)
s.insert(sg[i-a[j]]);
int cnt=0;//尋找當前狀態的最小排斥值
while(s.count(cnt)!=0)//返回值為cnt的元素個數
++cnt;
sg[i]=cnt;
}
int res=0;
for(int i=0; i<n; ++i)
res^=sg[x[i]];
if(res)puts("Alice");//先手必勝
else puts("Bob");
}
int main()
{
cin>>n>>k;
for(int i=0; i<k; ++i)
cin>>a[i];
for(int i=0; i<n; ++i)
cin>>x[i];
solve();
return 0;
}
/*
3
3
1 3 4
5 6 8
*/
相關文章
- 博弈論:公平組合遊戲(Nim 遊戲 & SG 定理)學習筆記遊戲筆記
- 51區,火影跑,紳士,一堆爛俗小遊戲的狂歡遊戲
- NIM遊戲/SG函式遊戲函式
- Nim遊戲2(臺階型)遊戲
- 博弈論基礎之sg函式與nim函式
- LeetCode每日一題:Nim遊戲(No.292)LeetCode每日一題遊戲
- git rebase master 分支出現一堆 ^MGitAST
- 組合遊戲與博弈論基礎遊戲
- 遊戲博弈論研究:最優解策略與混合迴圈戰略博弈遊戲
- P4301 [CQOI2013] 新Nim遊戲 線性基遊戲
- Android Q 適配指南 讓你少走一堆彎路Android
- 印度博弈遊戲開發者的一天遊戲開發
- 【博弈論】組合遊戲及SG函式淺析遊戲函式
- 第六章 數學問題 -------- 6.2【Nim遊戲】高僧鬥法遊戲
- 快醒醒,C# 9 中又來了一堆關鍵詞 init,record,withC#
- 幽默:演算法只是一堆帶有花哨名稱的 IF ELSE 語句演算法
- 博弈論是如何用於遊戲中的策略設計的?遊戲
- 中國主機遊戲往事:流量與內容的“博弈戰”遊戲
- 女朋友面試回來抱怨說會redis,面試官問了一堆redis面試Redis
- POJ 2975 Nim
- ACM-ICPC 2018 南京賽區網路預賽__K The Great Nim Game【博弈論+費馬小定理+DP】ACMGAM
- 【演算法學習筆記】博弈論淺析之遊戲類演算法筆記遊戲
- 在FPS遊戲中與人博弈的快樂,你根本無法想象遊戲
- 演算法題(41-->50)題目:海灘上有一堆桃子,五隻猴子來分...演算法
- E. Not a Nim Problem
- win10 n卡優化遊戲效能介面在哪裡_win10 n卡優化遊戲效能介面怎麼設定Win10優化遊戲
- N1CTF2018 shopping:多執行緒堆題中堆溢位的應用TF2執行緒
- 為什麼堆化 heapify() 只用 O(n) 就做到了?API
- 在Linux中,有一堆日誌檔案,如何刪除7天前的日誌檔案?Linux
- 如何構建多人遊戲生態環境——用博弈論強化體驗遊戲
- 博弈論系列—智豬博弈
- win10 n卡最佳化遊戲效能介面在哪裡_win10 n卡最佳化遊戲效能介面怎麼設定Win10遊戲
- 探索遊戲N種可能 不可錯過的盛會丨2021N.Game網易遊戲開發者峰會開啟報名GAM遊戲開發
- Leetcode 292. Nim GameLeetCodeGAM
- 享受最純粹的博弈,回合制對戰遊戲《AVARIAvs》現已上線遊戲
- 網易遊戲周家科:從體驗推進遊戲美術設計丨N.GAME遊戲GAM
- 寫給資料小白:怎麼讓你的分析結論超出預期,不再是廢紙一堆
- 資訊學奧賽一本通 1218:取石子游戲(NIM)
- 每一座屎山程式碼背後,都藏著一堆熟讀程式碼規範的研發