洛谷P4136 誰能贏呢? 題解 博弈論

2022-05-24 08:30:10 字數 1081 閱讀 7357

找規律首先這道題目我沒有什麼思路,所以一開始想到的是通過搜尋來列舉 \(n\) 比較小的時候的情況。

所以我開搜尋列舉了 \(n \le 8\) 的所有情況。

搜尋**:

#include using namespace std;

const int maxn = 11;

int n;

bool vis[maxn][maxn], res[maxn][maxn];

int dir[4][2] = ;

inline bool in_map(int x, int y)

bool dfs(int x, int y)

}vis[x][y] = false;

}void check()

int main()

輸出結果是:

check (1) : no

check (2) : yes

check (3) : no

check (4) : yes

check (5) : no

check (6) : yes

check (7) : no

check (8) : yes

所以,可以發現:當 \(n\) 為偶數時,先手勝,當 \(n\) 為奇數時,後手勝。

然後這道題目就這樣通過 找規律 找到了乙個假想的規律。

然後就ac了:

#include using namespace std;

int n;

int main()

return 0;

}

然後證明** shallowy大神的部落格

想象一下,可以把整個棋盤拆成若干個1*2的格仔,那麼,

很明顯,後手只是從乙個小格仔的一側走到了另一側;

而先手則找到了乙個新的格仔。

因為後手只需走,但先手要找,所以在某個時刻遊戲結束時,一定是先手找不到格仔了...

當n為偶數時,棋盤能完美地被拆掉——可是先手會找不到;當n為奇數時,先手才能贏。

洛谷P4136 誰能贏呢?

小明和小紅經常玩乙個博弈遊戲。給定乙個n n的棋盤,乙個石頭被放在棋盤的左上角。他們輪流移動石頭。每一回合,選手只能把石頭向上,下,左,右四個方向移動一格,並且要求移動到的格仔之前不能被訪問過。誰不能移動石頭了就算輸。假如小明先移動石頭,而且兩個選手都以最優策略走步,問最後誰能贏?輸入格式 輸入檔案...

P4136 誰能贏呢? 腦子

我們發現,若我們把棋盤黑白染色並設左上角為黑色,那麼顯然有 若 n 為奇數,黑色格仔比白色多一 若 n 為偶數,黑色格仔與白色的相等。然後很顯然,如果他們能夠把所有格仔都走到或少走 2 x 個格仔 即不改變奇偶性 那麼上面的結論是成立的。若最後有奇數個格仔沒有走到,那麼其實我們可以在中間改變最終的狀...

洛谷 P4136 誰能贏呢? 博弈論

小明和小紅經常玩乙個博弈遊戲。給定乙個n n的棋盤,乙個石頭被放在棋盤的左上角。他們輪流移動石頭。每一回合,選手只能把石頭向上,下,左,右四個方向移動一格,並且要求移動到的格仔之前不能被訪問過。誰不能移動石頭了就算輸。假如小明先移動石頭,而且兩個選手都以最優策略走步,問最後誰能贏?輸入格式 輸入檔案...