一雙木棋(chess)

2022-08-01 18:39:13 字數 2189 閱讀 4370

題目描述

菲菲和牛牛在一塊 nn 行 mm 列的棋盤上下棋,菲菲執黑棋先手,牛牛執白棋后手。

棋局開始時,棋盤上沒有任何棋子,兩人輪流在格仔上落子,直到填滿棋盤時結束。落子的規則是:乙個格仔可以落子當且僅當這個格仔內沒有棋子且這個格仔的左側及上方的所有格仔內都有棋子。

棋盤的每個格仔上,都寫有兩個非負整數,從上到下第 ii 行中從左到右第 jj 列的格仔上的兩個整數記作 a_ai,j​、b_bi,j​。在遊戲結束後,菲菲和牛牛會分別計算自己的得分:菲菲的得分是所有有黑棋的格仔上的 a_ai,j​之和,牛牛的得分是所有有白棋的格仔上的 b_bi,j​的和。

菲菲和牛牛都希望,自己的得分減去對方的得分得到的結果最大。現在他們想知道,在給定的棋盤上,如果雙方都採用最優策略且知道對方會採用最優策略,那麼,最終的結果如何。

輸入格式

從標準輸入中讀入資料。

輸入第一行包含兩個正整數 n, mn,m,保證 n, m \leq 10n,m≤10。 接下來 nn 行,每行 mm 個非負整數,按從上到下從左到右的順序描述每個格仔上的第乙個非負整數:其中第 ii 行中第 jj 個數表示 a_ai,j​。

接下來 nn 行,每行 mm 個非負整數,按從上到下從左到右的順序描述每個格仔上的第二個非負整數:其中第 ii 行中第 jj 個數表示 b_bi,j​。

輸出格式

輸出到標準輸出中。

輸出乙個整數,表示菲菲的得分減去牛牛的得分的結果。

樣例樣例輸入

2 3

2 7 3

9 1 2

3 7 2

2 3 1

樣例輸出

2
樣例解釋

棋盤如圖所示,雙方都採用最優策略時,棋局如下:

菲菲的得分為:2 + 9 + 1 = 122+9+1=12;牛牛的得分為:7 + 2 + 1 = 107+2+1=10。

資料範圍與提示

對於所有的測試資料,n, m \leq 10, a_, b_ \leq 100000n,m≤10,ai,j​,bi,j​≤100000。

對於編號為奇數的測試點,保證所有的 b_ = 0bi,j​=0。

測試點n=n=

m=m=

1,2,31,2,3

2222

4,5,64,5,6

3333

7,87,8

5555

9,109,10

8888

11,1211,12

1010

1113,1413,14

1010

2215,1615,16

1010

3317,18,19,2017,18,19,20

1010

1010

**ccf 2018省選day1

solution

乙個合法的狀態一定是乙個左上角,也就是一條從左下走到右上的路線。

那麼就是c(20,10)似乎不大。

考慮用hash壓縮狀態,記搜轉移。

似乎跑的非常慢,還好oj快

#include#include

#include

#include

#include

#include

#include

#define ll unsigned long long

#define p 793999

using

namespace

std;

int n,m,a[12][12],b[12][12],tmp[12

];unordered_map

int>f,g,s[12

];ll

get()

for(int i=1;i<=m;i++)s[i][h]=tmp[i];

return

h; }

void dfs(int

x,ll k)

if(g[k])return ;g[k]=1

;

for(int i=1;i<=m;i++)tmp[i]=s[i][k];

int mx=-1e9,mi=1e9;

if(tmp[1]

for(int i=1;i<=n;i++)

}if(x&1)f[k]=mx;else f[k]=mi;

}int

main()

九省聯考2018 一雙木棋 chess

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

九省聯考2018 一雙木棋chess

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

九省聯考2018 一雙木棋chess

據說這題是可以暴力踩過去的。還是考慮正解吧,是一種叫 輪廓線dp 的只聽過沒寫過的東西 不難發現,最後拿出來的棋子一定是左上角佔的一塊區域。發現 n m leq 20 我們可以狀壓一下這個區域右上到左下的邊界。具體來說,我們存乙個 2 以內的數,1 表示向下 0 表示向左。是否需要再開一維狀態維護當...