歷屆試題 地宮取寶 簡單dfs

2021-09-12 01:33:22 字數 1321 閱讀 5146

問題描述

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 22 1

樣例輸出

樣例輸入

2 3 2

1 2 3

2 1 5

樣例輸出

解法就是簡單的dfs如果不進行記憶化的話,會超時的

#include #includeusing namespace std;

const int size = 55,max=1000000007;

int n,m,k,rst=0;

int pos=1;

int matrix[size][size];

vectorred;//用來記錄拿的物件

void dfs(int x , int y)

bool get = true;

vector::iterator it;

for(it=red.begin();it!=red.end();it++)

if(*it>=matrix[x][y])

if(get && pos) red.push_back(matrix[x][y]);

++pos;

if(x==n && y==m && pos==k)

dfs(x , y+1);//拿了

dfs(x+1 , y);//拿了

--pos;red.pop_back();

dfs(x , y+1);//沒拿

dfs(x+1 , y);//沒拿

}int main()

if (x+1<=n) //可以向下走

if (y+1<=m) //可以向右走 }

int main()

歷屆試題 地宮取寶

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

歷屆試題 地宮取寶

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

歷屆試題 地宮取寶 dfs 記憶化

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