Contents
Problem
兩人輪流把數字往上加,可以加的數字為 1~6 ,並且各數字只能出現 4 次,看誰讓數字大於 31 ,就輸了。
Solution
長度為偶數,現在就是輪到 B,反之為 A。(ABAB…)
只要此時(假設是輪到 A ),在下一輪中有一種走法能讓 B 贏,A 就會輸。
每一輪都有 6 個選擇 1~6 ,除非某數字已經出現 4 次。
利用 DFS 去跑每種選擇:
for (int i = 0; i < 6; i++)
{
if (num[i] < 4)
{
num[i]++;
if (dfs(next) == next)//如果下一個有會贏的,代表現在這個會輸
{
now = next;
num[i]--;
break;
}
num[i]--;
}
}
邊紀錄下每種狀況(都只會有一個贏家),可供重複查找。
Code
1 |
|