poj 2068(博弈 狀態轉移)

2021-10-02 04:19:19 字數 1077 閱讀 8118

如果某個狀態能到達的狀態都是必勝態,那麼此狀態為必敗態

如果某個狀態能到達的狀態存在必敗態,那麼此狀態為必勝態

#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們兩兩配對 轉換成只有兩堆石子的情況 按照石子數從小到大排序,兩兩配對成一組,組與組之間互不影響 如果可以完美配對 配對後每一組都有兩堆...