最長滑雪路徑

2021-07-11 04:31:39 字數 1453 閱讀 5397

michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待公升降機來載你。michael想知道載乙個區域中最長底滑坡。區域由乙個二維陣列給出。陣列的每個數字代表點的高度。下面是乙個例子 

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-16-1。當然25-24-23-...-3-2-1更長。事實上,這是最長的一條。

第一行表示有幾組測試資料,輸入的第二行表示區域的行數r和列數c(1 <= r,c <= 100)。下面是r行,每行有c個整數,代表高度h,0<=h<=10000。

後面是下一組資料;

15 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

思想(動態規劃):f[i][j]儲存m[i][j]這個點為終點的最長路徑,那麼f[i][j]的確定可以是上下左右四個方向滑向m[i][j],取四個方向的最大值在+1就可以了

#include#include#includeusing namespace std;

inline int max(int a, int b)

inline int max(int a, int b, int c, int d)

int f[100][100];//全域性變數自動初始化為0,f中是該點的最大值

int r, c;

int m[100][100];

int dfs(int row, int col, int h)

if (f[row][col] >= 0)//已經搜尋過,直接返回

//四個方向

f[row][col] = max(dfs(row - 1, col, m[row][col]),//上

dfs(row, col + 1, m[row][col]),//右

dfs(row + 1, col, m[row][col]),//下

dfs(row, col - 1, m[row][col]))+1;//左

return f[row][col];

}int main()

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

}cout << max << endl;

} system("pause");

return 0;

}

滑雪求最長路徑

輸入檔案 第1行 兩個數字r,c 1 r,c 100 表示矩陣的行列。第2 r 1行 每行c個數,表示這個矩陣。輸出檔案 僅一行 輸出1個整數,表示可以滑行的最大長度 樣例輸入 5 51 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 ...

藍橋杯 最長滑雪道 遞迴解法

食 雪 漢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 樣例輸出 思路是這樣的 param x 當前位置的 x 座標 param y 當前位置的 y 座標 return 從 x,y 出發,可以滑行的最長長度...

最長遞增路徑

乙個無向圖,可能有自環,有重邊,每條邊有乙個邊權。你可以從任何點出發,任何點結束,可以經過同乙個點任意次。但是不能經過同一條邊2次,並且你走過的路必須滿足所有邊的權值嚴格單調遞增,求最長能經過多少條邊。以此圖為例,最長的路徑是 3 1 2 3 2 或 3 1 2 3 4 長度為4。input 第1行...