藍橋杯 地宮尋寶 帶快取的DFS

2021-09-07 12:51:52 字數 1443 閱讀 9567

歷屆試題 地宮取寶  

時間限制:1.0s   記憶體限制:256.0mb

問題描寫敘述

x 國王有乙個地宮寶庫。

是 n x m 個格仔的矩陣。

每乙個格仔放一件寶貝。

每乙個寶貝貼著價值標籤。

地宮的入口在左上角,出口在右下角。

小明被帶到地宮的入口,國王要求他僅僅能向右或向下行走。

走過某個格仔時,假設那個格仔中的寶貝價值比小明手中隨意寶貝價值都大,小明就能夠拿起它(當然,也能夠不拿)。

當小明走到出口時,假設他手中的寶貝恰好是k件,則這些寶貝就能夠送給小明。

請你幫小明算一算,在給定的局面下,他有多少種不同的行動方案能獲得這k件寶貝。

輸入格式

輸入一行3個整數,用空格分開:n m k (1<=n,m<=50, 1<=k<=12)

接下來有 n 行資料,每行有 m 個整數 ci (0<=ci<=12)代表這個格仔上的寶物的價值

輸出格式

要求輸出乙個整數,表示正好取k個寶貝的行動方案數。該數字可能非常大。輸出它對 1000000007 取模的結果。

例子輸入

2 2 2

1 2

2 1

例子輸出

2

例子輸入

2 3 2

1 2 3

2 1 5

例子輸出

dp[x][y][num][maxvalue]  代表走到(x,y)位置的時候手裡持有num個寶貝並且最大值為maxvalue的方案數.

該陣列一開始初始化為-1.

#include #include #include #include using namespace std;

#define eps 10e-10

#define n 1000000007

int ans;

int d[51][51][13][14];

int p[51][51];

int n,m,k;

int dfs(int x,int y,int num,int maxvalue)

int t = 0;

if(x == n-1 && y == m-1)

if(x + 1 < n)

t += dfs(x+1,y,num,maxvalue);

t %= n;

}if(y + 1 < m)

t += dfs(x,y+1,num,maxvalue);

t %= n;

}d[x][y][num][maxvalue+1] = t;

return d[x][y][num][maxvalue+1];

}int main()

memset(d,-1,sizeof(d));

d[0][0][0][0] = dfs(0,0,0,-1);//由於寶貝的最小價值能夠為0

cout<

藍橋杯2023年c c B組(地宮尋寶)

x 國王有乙個地宮寶庫。是 n x m 個格仔的矩陣。每個格仔放一件寶貝。每個寶貝貼著價值標籤。地宮的入口在左上角,出口在右下角。小明被帶到地宮的入口,國王要求他只能向右或向下行走。走過某個格仔時,如果那個格仔中的寶貝價值比小明手中任意寶貝價值都大,小明就可以拿起它 當然,也可以不拿 當小明走到出口...

藍橋杯 地宮取寶 (DFS 記憶化搜尋)

歷屆試題 地宮取寶 時間限制 1.0s 記憶體限制 256.0mb 問題描述 x 國王有乙個地宮寶庫。是 n x m 個格仔的矩陣。每個格仔放一件寶貝。每個寶貝貼著價值標籤。地宮的入口在左上角,出口在右下角。小明被帶到地宮的入口,國王要求他只能向右或向下行走。走過某個格仔時,如果那個格仔中的寶貝價值...

藍橋杯 地宮取寶 DFS 記憶化搜尋

地宮取寶 時間限制 1.0s 記憶體限制 256.0mb 問題描述 x 國王有乙個地宮寶庫。是 n x m 個格仔的矩陣。每個格仔放一件寶貝。每個寶貝貼著價值標籤。地宮的入口在左上角,出口在右下角。小明被帶到地宮的入口,國王要求他只能向右或向下行走。走過某個格仔時,如果那個格仔中的寶貝價值比小明手中...