崔化博 @ 2021-03-13 08:02:42
#include <iostream>
#include <climits>
#include <cstdio>
#include <algorithm>
using namespace std;
int r,c,a[105][105]={INT_MAX},maxx,f[105][105];
int xy[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int dfs(int x,int y){
if(f[x][y])
return f[x][y];
f[x][y]=1;
for(int i=0;i<4;++i){
int dx=x+xy[i][0],dy=y+xy[i][1];
if(a[x][y]>a[dx][dy])
f[x][y]=max(dfs(dx,dy)+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",&a[i][j]);
for(int i=1;i<=r;++i){
for(int j=1;j<=c;++j){
maxx=max(dfs(i,j),maxx);
}
}
printf("%d",maxx-1);
return 0;
}
by int64 @ 2021-03-13 08:04:48
@崔化博 应该是评测姬坏了,等一会试试
by EuphoricStar @ 2021-03-13 08:23:31
@崔化博 你的程序有 UB,亲测这样可过
#include <iostream>
#include <climits>
#include <cstdio>
#include <algorithm>
using namespace std;
int r,c,a[105][105],maxx,f[105][105];
int xy[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int dfs(int x,int y){
if(f[x][y])
return f[x][y];
f[x][y]=1;
for(int i=0;i<4;++i){
int dx=x+xy[i][0],dy=y+xy[i][1];
if (dx<1||dx>r||dy<1||dy>c) continue;
if(a[x][y]>a[dx][dy])
f[x][y]=max(dfs(dx,dy)+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",&a[i][j]);
for(int i=1;i<=r;++i){
for(int j=1;j<=c;++j){
maxx=max(dfs(i,j),maxx);
}
}
printf("%d",maxx);
return 0;
}
by Elma_ @ 2021-03-13 08:32:40
不判边界能过才有鬼吧/wq