我們容易知道,棋子的擺放形狀應該是乙個階梯性(某dalao:來來來,輪廓線dp!)
我們選擇用狀態壓縮來表示整個棋盤的排放形態(11進製壓位,每個位上的數都表示一行的狀態)
這樣子我們每次對合法狀態進行拓展,dfs搜尋下去。輪到菲菲,我們期望她的得分大一些,而到牛牛,我們期望她的得分少一些。
所以我們對前者的cur_ans取max,後者的cur_ans取min(對抗搜尋)
至於那個神奇的阿爾法-貝塔剪枝,我試了試,但是好像有點問題,所以wa了
加乙個記憶化搜尋——
貌似就可以過了......(可是時間複雜度看起來很不ok啊.......)
// luogu-judger-enable-o2
#include#include#include#include#include#include#define ull unsigned long long
#define base 11
#define maxn 15
using namespace std;
int n,m;
int a[maxn][maxn],b[maxn][maxn],done[maxn][maxn],num[maxn];
mapsum;
inline ull calc()
inline void trans(ull x)
}inline int search(ull x,int op)
} sum[x]=cur_ans;
// cout
}int main()
九省聯考2018 一雙木棋 chess
菲菲和牛牛在一塊n 行m 列的棋盤上下棋,菲菲執黑棋先手,牛牛執白棋后手。棋局開始時,棋盤上沒有任何棋子,兩人輪流在格仔上落子,直到填滿棋盤時結束。落子的規則是 乙個格仔可以落子當且僅當這個格仔內沒有棋子且這個格仔的左側及上方的所有格仔內都有棋子。棋盤的每個格仔上,都寫有兩個非負整數,從上到下第i ...
九省聯考2018 一雙木棋chess
傳送門 這道題乍一看思路只有打個暴力。題目要求 乙個格仔可以落子當且僅當這個格仔內沒有棋子且這個格仔的左側及上方的所有格仔內都有棋子,即棋子一定都分布在左上角。也就是說塗了色的格仔的形狀一定是下面這樣的,我們考慮橫邊為1,豎邊為0,這個格仔的所有邊就是101010 沒包括其他邊界,只看藍色部分 考慮...
九省聯考2018 一雙木棋chess
據說這題是可以暴力踩過去的。還是考慮正解吧,是一種叫 輪廓線dp 的只聽過沒寫過的東西 不難發現,最後拿出來的棋子一定是左上角佔的一塊區域。發現 n m leq 20 我們可以狀壓一下這個區域右上到左下的邊界。具體來說,我們存乙個 2 以內的數,1 表示向下 0 表示向左。是否需要再開一維狀態維護當...