tyvj1004 滑雪

时间:2024-01-03 16:05:56

描述

    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<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = ;
int r,c,ans;
int h[maxn][maxn],f[maxn][maxn];
int dx[] = {-,,,};
int dy[] = {,-,,};
bool jud(int i,int j){
if(i < || i > r || j < || j > c) return false;
return true;
}
int dp(int i,int j){
if(f[i][j]) return f[i][j];
f[i][j] = ;
int y,x;
for(int t = ;t < ;t++){
y = i + dy[t];
x = j + dx[t];
if(jud(y,x) && h[i][j] > h[y][x]) f[i][j] = max(f[i][j], + dp(y,x));
}
return f[i][j];
}
int main(){
cin>>r>>c;
for(int i = ;i <= r;i++){
for(int j = ;j <= c;j++){
cin>>h[i][j];
}
}
for(int i = ;i <= r;i++){
for(int j = ;j <= c;j++){
ans = max(ans,dp(i,j));
}
}
cout<<ans;
return ;
}