藍橋杯 2023年第五屆真題 地宮取寶

2021-10-24 12:12:38 字數 1422 閱讀 1715

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

這道題可以用搜尋遞迴的方法去做,但是在做遞迴的時候需要用到記憶化搜尋,否則就會出現超時,再具體到題目,可以從3個方面入手:

1.如果格仔中的物品價值比自己物品最大價值大,那麼就選取。

2.如果格仔中的物品價值比自己物品最大價值大,那麼就不選取

3.如果格仔中的物品價值比自己物品最大價值小,那麼就不選取

由於對於2.3都是不選取,所以可以將其歸併為一類,即,不選取格仔中的物品,則變成兩個方面。

#include

#include

using

namespace std;

int n,m,k;

int map[55]

[55];

const

int mod =

1000000007

;long

long dp[55]

[55][

14][14

];//用來儲存結果,記憶化搜尋

long

long

dfs(

int x,

int y,

int count,

int max)

return ans;}if

(t > max)

//可以拿走寶物

//價值小不拿該寶物或價值**擇不拿該寶物

ans +

=dfs

(x,y+

1,count,max)

;

ans +

=dfs

(x+1

,y,count,max)

; dp[x]

[y][count]

[max+1]

= ans%mod;

return ans%mod;

}int

main()

藍橋杯 2023年第五屆真題 地宮取寶

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

藍橋杯 2023年第五屆真題 分糖果

問題描述 有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲 每個小朋友都把自己的糖果分一半給左手邊的孩子。一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。你的任務是 在已知的初始糖果情形下,老師一共需要補...

藍橋杯 2023年第五屆真題 分糖果

時間限制 1sec 記憶體限制 128mb 提交 5184 解決 2783 題目描述 問題描述 有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲 每個小朋友都把自己的糖果分一半給左手邊的孩子。一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。反覆進行這個遊戲...