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
程式應該輸出:
14 資源約定:
峰值記憶體消耗
cpu消耗
請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入...」的多餘內容。
所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。
注意: main函式需要返回0
注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。
注意: 所有依賴的函式必須明確地在原始檔中#include ,
不能通過工程設定而省略常用標頭檔案。
提交時,注意選擇所期望的編譯器型別。
快速解題思路:四維陣列直接dfs記憶化啊,看到後面三個大題,就覺得這題最好下手,直接動手做,乙個四維陣列標記。
**:(dfs記憶化 12』 應該沒問題)
1view code#pragma comment(linker, "/stack:1024000000,1024000000")
2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include
10 #include11 #include12 #include13 #include14 #include 15
using
namespace
std;
1617
#define eps 10e-10
18#define n 1000000007
1920
intans;
21int d[51][51][13][14
];
22int p[51][51
];
23int
n,m,k;
2425
int dfs(int x,int y,int num,int
maxvalue)
29int t = 0
; 30
if(x == n-1 && y == m-1
) 34
else
if(num ==k)
37return d[x][y][num][maxvalue + 1] =t;
38}
3940
if(x + 1
47else
51} 52
53if(y + 1
60else
64} 65 d[x][y][num][maxvalue + 1] =t;
66return d[x][y][num][maxvalue + 1
];
67}
6869
intmain()
75 memset(d,-1,sizeof
(d));
76 d[0][0][0][0] = dfs(0,0,0,-1
);
77 cout<0][0][0][0]<
78}
79return
0;
80 }
藍橋杯 地宮取寶
x 國王有乙個地宮寶庫,是 n m 個格仔的矩陣,每個格仔放一件寶貝,每個寶貝貼著價值標籤。地宮的入口在左上角,出口在右下角。小明被帶到地宮的入口,國王要求他只能向右或向下行走。走過某個格仔時,如果那個格仔中的寶貝價值比小明手中任意寶貝價值都大,小明就可以拿起它 當然,也可以不拿 當小明走到出口時,...
藍橋杯 地宮取寶 DP
問題描述 x 國王有乙個地宮寶庫。是 n x m 個格仔的矩陣。每個格仔放一件寶貝。每個寶貝貼著價值標籤。地宮的入口在左上角,出口在右下角。小明被帶到地宮的入口,國王要求他只能向右或向下行走。走過某個格仔時,如果那個格仔中的寶貝價值比小明手中任意寶貝價值都大,小明就可以拿起它 當然,也可以不拿 當小...
藍橋杯 地宮取寶 dp
歷屆試題 地宮取寶 時間限制 1.0s 記憶體限制 256.0mb 問題描述 x 國王有乙個地宮寶庫。是 n x m 個格仔的矩陣。每個格仔放一件寶貝。每個寶貝貼著價值標籤。地宮的入口在左上角,出口在右下角。小明被帶到地宮的入口,國王要求他只能向右或向下行走。走過某個格仔時,如果那個格仔中的寶貝價值...