如果某個狀態能到達的狀態都是必勝態,那麼此狀態為必敗態
如果某個狀態能到達的狀態存在必敗態,那麼此狀態為必勝態
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) ((x)<<1)
#define r(x) ((x)<<1|1)
#define lowbit(x) ((x)&(-(x)))
#define abs(x) ((x)>=0?(x):(-(x)))
#define ms(a,b) memset(a,b,sizeof(a))
#define nsync std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);
using
namespace std;
int n, s, m[22]
,dp[22]
[1<<14]
;int
get(
int i,
int j)
return dp[i]
[j]=0;
}int
main()
ms(dp,-1
);printf
("%d\n"
,get(0
, s));
}return0;
}
狀壓 博弈dp
傳送門 題目大意 遊戲的雙方能在 1 n 之間選擇乙個數加到sum上,每個數只能選擇一次。誰先將sum 變得 max 誰就贏了。現在問你,給定 n sum.先手是否能贏 兩方採取最優策略 n 20 max 300 思路 很容易發現n 很小,可以直接狀態壓縮。但是有乙個問題。直觀的想法是開二維陣列,這...
博弈論(階梯博弈)POJ 1704
對階梯博弈的闡述 博弈在一列階梯上進行,每個階梯上放著自然數個點。兩個人進行階梯博弈,每一步則是將乙個集體上的若干個點 1 移到前面去,最後沒有點可以移動的人輸 證明方式 如這就是乙個階梯博弈的初始狀態 2 1 3 2 4 只能把後面的點往前面放 如何來分析這個問題呢 其實階梯博弈經過轉換可以變為n...
poj1740 博弈論,對稱博弈)
題目 有若干堆石子,每一次需要從一堆石子中拿走一些,然後如果願意的話,再從這堆石子中拿一些分給其它任意堆。不能操作的人負。解析 實際上如果n為偶數,我們就可以把ta們兩兩配對 轉換成只有兩堆石子的情況 按照石子數從小到大排序,兩兩配對成一組,組與組之間互不影響 如果可以完美配對 配對後每一組都有兩堆...