給定乙個r行c列的矩陣,表示乙個矩形網格滑雪場。矩陣中第 i 行第 j 列的點表示滑雪場的第 i 行第 j 列區域的高度。
乙個人從滑雪場中的某個區域內出發,每次可以向上下左右任意乙個方向滑動乙個單位距離。當然,乙個人能夠滑動到某相鄰區域的前提是該區域的高度低於自己目前所在區域的高度。下面給出乙個矩陣作為例子:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
在給定矩陣中,一條可行的滑行軌跡為24-17-2-1。
在給定矩陣中,最長的滑行軌跡為25-24-23-…-3-2-1,沿途共經過25個區域。
現在給定你乙個二維矩陣表示滑雪場各區域的高度,請你找出在該滑雪場中能夠完成的最長滑雪軌跡,並輸出其長度(可經過最大區域數)。
思路:從中間開始滑,從大到小最多能滑25個格仔。
狀態表示:
集合:f[i][j]表示狀態,從f[i][j]開始滑,所有表示從i,j開始滑的所有路徑。屬性:max
狀態計算:就是搜尋,每個點能不能向上下左右動
下面**中的f[x][y] = max(f[x][y],dp(xx,yy)+1);
實際上就是向四個方向判斷之後轉移:
輸入格式
第一行包含兩個整數r和c。
接下來r行,每行包含c個整數,表示完整的二維矩陣。
輸出格式
輸出乙個整數,表示可完成的最長滑雪長度。
資料範圍
1≤r,c≤3001≤r,c≤300,
0≤矩陣中整數≤100000≤矩陣中整數≤10000
輸入樣例:
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
輸出樣例:
25
#include#define read(x) scanf("%d",&x)
using namespace std;
const int n = 310;
int n,m,a[n][n],f[n][n];
int dx[4] = ;
int dy[4] = ;
int dp(int x,int y)
return f[x][y];
}int main()
滑雪 記憶化搜尋
from silence 滑雪 背景 background 成成第一次模擬賽 第三道 描述 description 輸入格式 input format 輸入檔案 第1行 兩個數字r,c 1 r,c 100 表示矩陣的行列。第2.r 1行 每行c個數,表示這個矩陣。輸出格式 output format...
記憶化搜尋 滑雪
題目描述 michael喜歡滑雪這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 1 2 3 4 5 16...
滑雪 記憶化搜尋
trs喜歡滑雪。他來到了乙個滑雪場,這個滑雪場是乙個矩形,為了簡便,我們用r行c列的矩陣來表示每塊地形。為了得到更快的速度,滑行的路線必須向下傾斜。例如樣例中的那個矩形,可以從某個點滑向上下左右四個相鄰的點之一。例如24 17 16 1,其實25 24 23 3 2 1更長,事實上這是最長的一條。輸...