東華oj 挑戰題第74題 地宮取寶

2021-10-03 08:00:27 字數 2029 閱讀 6770

74 地宮取寶

問題描述 :

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 3 2 1 2 3 2 1 5 輸出範例 : 14

**:

/*

t74 地宮尋寶

涉及到動態規劃,深度優先搜尋,四維陣列,取餘相關數學原理

*/#include

#include

#define max_size 51

int n, m, k;

int map[max_size]

[max_size]

;// 寶物地圖

int dp[max_size]

[max_size][15

][15]

;int

dfs(

int x,

int y,

int sum,

int max)

;int

main()

}memset

(dp,-1

,sizeof

(dp));

// 初始化

printf

("%d\n"

,dfs(1

,1,0

,-1)

);return0;

}// 求方案的總數

// x y sum max分別表示座標(x, y),當前寶物數量,當前寶物最大價值

intdfs

(int x,

int y,

int sum,

int max)

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

}else

if(sum == k)

return dp[x]

[y][sum]

[max +1]

= plans;

// 這裡sum不變,因為求的是(x,y)點的方案

}// 當前點不是出口,則有兩種情況,向右走或者向下走(如果能走的話)

// 而從當前點到出口的方案總數就是向右走和向下走兩個方向的方案總數之和

if(x +

1<= n)

} plans +

=dfs

(x +

1, y, sum, max)

; plans %

=1000000007;}

if(y +

1<= m)

} plans +

=dfs

(x, y +

1, sum, max)

; plans %

=1000000007;}

dp[x]

[y][sum]

[max +1]

= plans;

return dp[x]

[y][sum]

[max +1]

;}

這競賽題是真滴難……

參考了一位大佬

東華oj 挑戰題第1題 Huffuman樹

1 huffuman樹 問題描述 huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心huffman樹的構造過程。給出一列數 用這列數構造huffman樹的過程如下 1.找到中最小的兩個數,設為pa和pb,將pa和pb從中刪除掉,然後將它們的和加入到中。這個過程的費用記為pa pb。2.重複步...

東華oj 挑戰題第8題 矩形面積交

8 矩形面積交 問題描述 平面上有兩個矩形,它們的邊平行於直角座標系的x軸或y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你程式設計算出兩個矩形的交的面積。輸入說明 輸入僅包含兩行,每行描述乙個矩形。在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個絕對值不超過10 7的實數表示。...

東華oj 基礎題第32題

32 完數個數 問題描述 完數的定義 如果乙個大於1的正整數的所有真因子 不包括自己的那些因子 之和等於它的本身,則稱這個數是完數,比如6,28都是完數 6 1 2 3 28 1 2 4 7 14。本題的任務是判斷兩個正整數之間完數的個數。輸入說明 第一行是乙個正整數n,表示測試例項的個數,然後就是...