Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
141282 冼俊烨 滑雪 C++ 通过 100 0 MS 264 KB 1169 2024-04-03 13:17:58

Tests(5/5):


//滑雪 #include <bits/stdc++.h> using namespace std; const int dx[4]= {-1,0,1,0}; //x的增量坐标 const int dy[4]= {0,1,0,-1}; //y的增量坐标 int m[101][101],f[101][101]; int r,c; int Search(int x,int y) //求到[x,y]点的最长路径 { if(f[x][y]>0) //如此点出发的长度已求出 return f[x][y]; //则无需递归 f[x][y]=1; //自身初始长度就是1 for(int i=0; i<=3; i++) //从四个点搜索能到达[x,y]的点 { int nx=x+dx[i]; //加上横坐标增量 int ny=y+dy[i]; //加上纵坐标增量 if(nx>=1 && nx<=r && ny>=1 && ny<=c && m[x][y]<m[nx][ny]) f[x][y]=max(Search(nx,ny)+1,f[x][y]); //递归进行记忆化搜索 } return f[x][y]; } int main() { scanf("%d%d",&r,&c); for(int i=1; i<=r; i++) for(int j=1; j<=c; j++) scanf("%d",&m[i][j]); int ans=0; for(int i=1; i<=r; i++) for(int j=1; j<=c; j++) { f[i][j]=Search(i,j); ans=max(f[i][j],ans); } printf("%d\n",ans); return 0; }


测评信息: