kongksora @ 2016-06-30 20:14:36
#include<iostream>
#include<cstdlib>
using namespace std;
int n,m,a[100][100],b[100][100]={0},lx,ly,d[100][100]={0};
int fx[4]={-1,0,1,0};
int fy[4]={0,1,0,-1};
void dg1(int x,int y)
{
for(int i=0;i<4;i++)
{
if(x+fx[i]<0||x+fx[i]>=n||y+fy[i]<0||y+fy[i]>=n||a[x+fx[i]][y+fy[i]]>=a[x][y])
{
lx=x,ly=y;
return;
}
dg1(x+fx[i],y+fy[i]);
}
}
void dg(int x,int y,int s)
{
b[x][y]=s;
for(int i=0;i<4;i++)
{
if(x+fx[i]<0||x+fx[i]>=n||y+fy[i]<0||y+fy[i]>=n||a[x+fx[i]][y+fy[i]]<=a[x][y]||b[x+fx[i]][y+fy[i]]>s)
{
continue;
cout<<1<<endl;
}
cout<<1<<endl;
d[x][y]=1;
dg(x+fx[i],y+fy[i],s+1);
}
}
int main()
{
int s=-100;
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(d[i][j])continue;
dg1(i,j);
dg(lx,ly,1);
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(b[i][j]>s)s=b[i][j];
}
}
cout<<s;
}
by 梦魇 @ 2016-08-18 21:34:51
#include<iostream>
#include<cstdio>
using namespace std;
const int N=110;
const int move[4][2]={1,0,0,1,-1,0,0,-1};
int n,m,ans,i,j,a[N][N];
int f[N][N];
bool check(int x,int y)
{
return x>0&&x<=n&&y>0&&y<=m;
}
int dfs(int x,int y)
{
if(f[x][y]>0)return f[x][y];
f[x][y]=1;
for(int k=0;k<=3;k++)
{
if(a[x+move[k][0]][y+move[k][1]]<a[x][y]&&check(x+move[k][0],y+move[k][1]))
f[x][y]=max(f[x][y],dfs(x+move[k][0],y+move[k][1])+1);
}
return f[x][y];
}
int main()
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&a[i][j]);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
ans=max(ans,dfs(i,j));
printf("%d\n",ans);
return 0;
}