九省聯考2018 一雙木棋chess

2022-05-08 05:06:09 字數 590 閱讀 4281

據說這題是可以暴力踩過去的。。

還是考慮正解吧,是一種叫 輪廓線dp 的只聽過沒寫過的東西

不難發現,最後拿出來的棋子一定是左上角佔的一塊區域。發現 $ n + m \leq 20 $ 我們可以狀壓一下這個區域右上到左下的邊界。具體來說,我們存乙個 $ 2^ $ 以內的數,1 表示向下 0 表示向左。

是否需要再開一維狀態維護當前是哪個人在下?沒必要,當確定輪廓線的時候已經下的步數是確定的,所以可以知道是誰在下。為了方便實現採用記搜。

#include "iostream"

#include "algorithm"

#include "cstring"

#include "cstdio"

using namespace std;

#define maxn 12

int n , m;

int a[maxn][maxn] , b[maxn][maxn];

int dp[1 << 20];

int work( int sta , int w )

return dp[sta];

}int main()

九省聯考2018 一雙木棋

我們容易知道,棋子的擺放形狀應該是乙個階梯性 某dalao 來來來,輪廓線dp!我們選擇用狀態壓縮來表示整個棋盤的排放形態 11進製壓位,每個位上的數都表示一行的狀態 這樣子我們每次對合法狀態進行拓展,dfs搜尋下去。輪到菲菲,我們期望她的得分大一些,而到牛牛,我們期望她的得分少一些。所以我們對前者...

九省聯考2018 一雙木棋 chess

菲菲和牛牛在一塊n 行m 列的棋盤上下棋,菲菲執黑棋先手,牛牛執白棋后手。棋局開始時,棋盤上沒有任何棋子,兩人輪流在格仔上落子,直到填滿棋盤時結束。落子的規則是 乙個格仔可以落子當且僅當這個格仔內沒有棋子且這個格仔的左側及上方的所有格仔內都有棋子。棋盤的每個格仔上,都寫有兩個非負整數,從上到下第i ...

九省聯考2018 一雙木棋chess

傳送門 這道題乍一看思路只有打個暴力。題目要求 乙個格仔可以落子當且僅當這個格仔內沒有棋子且這個格仔的左側及上方的所有格仔內都有棋子,即棋子一定都分布在左上角。也就是說塗了色的格仔的形狀一定是下面這樣的,我們考慮橫邊為1,豎邊為0,這個格仔的所有邊就是101010 沒包括其他邊界,只看藍色部分 考慮...