地宮取寶 DFS 記憶儲存

2021-09-12 10:30:10 字數 2176 閱讀 9925

地宮取寶

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 3 2

1 2 3

2 1 5

樣例輸出

14思路:如果只是單純的用dfs的話會造成超時,所以通過網上的大佬了解到可以利用dfs+記憶儲存來進行深度遍歷

我們可以利用乙個思維陣列來進行 dfs(a,b,sum,max);引數為:a,b,為當前座標,sum為現在已經存了幾個數了,max為這一條路中的最大數為多少,dp[a][b][sum][max];的值為從(a,b)且從(1,1)座標到(a,b)這條路徑一共存了sum個值,且這條路徑中的最大值為max,整體思路是乙個dfs從頭到末尾的。

當到達乙個點的時候,首先判斷這個點是否大於max,如果大於max的話可以存或者不存

,又由於此座標有一條路(在末端的時候只有一條路)或者兩條路的選擇有路徑選擇的時候,

當這個點的值不大於max的時候則不存,也是有兩條路,則進行下乙個選擇,不存入值。

邊界條件:

當已經到達了末點,如果sumk的話說明此時這條路徑存在一種方法,

如果sumk-1再判斷此點的值是否大於max如果大於max的話就存,如果不大於則不存

具體**表示:

記住思路:

public class demo20190308_2 ,};//只可以右和向下

static long dp = new long[51][51][13][14];//最後乙個數值為13說明前面沒有值

static int data = new int[51][51];

static int row =0;

static int cloum=0;

static int k=0;//用於存放總數

public static long dfs(int p,int q,int sum,int max) else

return dp[p][q][sum][max]=0;

} long temp=0;

if(data[p][q]>max)

temp=dfs(a,b,sum+1,data[p][q])%1000000007+dfs(a,b,sum,max)%1000000007+temp%1000000007;//存於不存

}} else

temp=dfs(a,b,sum,max)%1000000007+temp%1000000007;//不存

}} dp[p][q][sum][max]=temp%1000000007;

return dp[p][q][sum][max];

} public static void init() }}

} //第乙個數值選不選

long temp=0;

for(int i=0;i<2;i++)

temp=dfs(a,b,1,data[1][1])%1000000007+dfs(a,b,0,0)%1000000007+temp%1000000007;//存於不存

} dp[1][1][0][0]=temp%1000000007;//從第乙個數值開始,然後從數值為0,並且第乙個數此時是沒有值的

} public static void main(string args)

} init();//初始值

if(row==1&&cloum==1&&k==1)system.out.println(1);

else

system.out.println(dp[1][1][0][0]);

}}

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

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

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

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

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

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