計蒜客 難題題庫 203 矩形滑雪場
阿新 • • 發佈:2019-02-07
trs喜歡滑雪。他來到了一個滑雪場,這個滑雪場是一個矩形,為了簡便,我們用r行c列的矩陣來表示每塊地形。為了得到更快的速度,滑行的路線必須向下傾斜。 例如樣例中的那個矩形,可以從某個點滑向上下左右四個相鄰的點之一。例如24-17-16-1,其實25-24-23…3-2-1更長,事實上這是最長的一條。
輸入格式:
第1行: 兩個數字r,c(1< =r,c< =100),表示矩陣的行列。 第2..r+1行:每行c個數,表示這個矩陣。
輸出格式:
僅一行: 輸出1個整數,表示可以滑行的最大長度。
樣例1
輸入:
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<iostream> #include<vector> using namespace std; const int maxn = 100; int r, c; int max_len[maxn][maxn], mp[maxn][maxn]; int get_len(int i, int j){ if(max_len[i][j]){ return max_len[i][j]; } int max_neighbor = 0; if(i - 1 >= 0 && mp[i][j] > mp[i - 1][j]){ max_neighbor = max(max_neighbor, get_len(i - 1, j)); } if(i + 1 < r && mp[i][j] > mp[i + 1][j]){ max_neighbor = max(max_neighbor, get_len(i + 1, j)); } if(j - 1 >= 0 && mp[i][j] > mp[i][j - 1]){ max_neighbor = max(max_neighbor, get_len(i, j - 1)); } if(j + 1 < c && mp[i][j] > mp[i][j + 1]){ max_neighbor = max(max_neighbor, get_len(i, j + 1)); } max_len[i][j] = max_neighbor + 1; return max_len[i][j]; } int main(){ // freopen("test.txt", "r", stdin); cin >> r >> c; int i, j; for(i = 0; i < r; ++i){ for(j = 0; j < c; ++j){ cin >> mp[i][j]; } } int res = 0; for(i = 0; i < r; ++i){ for(j = 0; j < c; ++j){ res = max(res, get_len(i, j)); } } cout << res << endl; }