cn_lemon @ 2017-07-13 11:30:59
/* 为什么会90分????
第九个点的第二个数字为0(标准输出10),我是8。。。。
鄙人实在看不出来,求大佬(帅哥)解答
*/
#include<iostream>
#include<cstdio>
using namespace std;
const int MAXN=100+10;
int a[MAXN][MAXN],w[MAXN][MAXN],ww[MAXN][MAXN];
int r,c,maxx,sum;
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
void dfs(int x,int y,int k)
{
int i,flag=0;
if(ww[x][y])
{
//printf("*%d*\n",sum);
sum=max(sum,k+ww[x][y]-1);
//printf("*%d %d %d*\n",k,sum,ww[x][y]);
return;
}
for(i=0;i<4;i++)
{
int x1=x+dx[i],y1=y+dy[i];
if(a[x1][y1]>=a[x][y]||x1<=0||y1<=0||x1>r||y1>c)continue;
flag=1;
//printf("%d %d %d %d %d\n",x,y,sum,a[x][y],k);
dfs(x1,y1,k+1);
//printf("%d %d %d %d %d\n",x,y,sum,a[x][y],k);
w[x][y]=max(w[x][y],sum-k+1);
}
if(flag==0)
{
sum=max(k,sum);
w[x][y]=1;
}
}
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++)
if(!ww[i][j])
{
sum=0;
dfs(i,j,1);
maxx=max(sum,maxx);
//printf("\n");
for(int ii=1;ii<=r;ii++)
for(int jj=1;jj<=c;jj++)
if(ww[ii][jj]==0)
ww[ii][jj]=w[ii][jj];
}
printf("%d",maxx);
return 0;
}
by cn_lemon @ 2017-07-21 19:46:21
没人回答我的问题,我只能重新做了
QWQ
by taoran @ 2017-07-27 21:00:17
@WilliamPen +1
by 四氢呋喃 @ 2017-08-04 20:55:12
你这个标题党
by t162 @ 2019-10-07 11:37:07
考古
by _StarDust @ 2019-12-07 17:00:14
考古