藍橋 地宮尋寶 記憶化搜尋

2021-09-13 01:52:37 字數 1206 閱讀 8435

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中判斷過程。

第二次我直接從1,0這個點開始走,因為只能往右走成立,其實這樣也是對的,只是在最後輸出的時候也要輸出的是1,0點的值。

第三次是沒有考慮0的情況,然後看網上大佬題解,還挺秀,+1之後不影響最大值的判斷。

最後一次取模,每次用到s,都要取模。

#includeusing namespace std;

const int mod = 1000000007;

int n,m,z;

long long ans=0;

int mp[55][55];

long long qk[55][55][13][13];

int dir[5][2]=,};

void init()

int dfs(int x,int y,int maxn,int k)else

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

s+=dfs(nx,ny,maxn,k);

s%=mod;

} }return qk[x][y][maxn+1][k]=s%mod;

}int main()

地宮尋寶(記憶化所搜)

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

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

思路 記憶化搜尋,dp x y curmax num 記錄的是要取 x,y 位置時,拿了num個物品,其中最大價值為curmax的 時 候的方案數量。注意有個坑點,物品價值可能為0,搜尋時我們初始價值為0,但第乙個價值為0的物品是可以取的,所以我們讀入時 講 所有物品價值 1.include inc...

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

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