1 条题解

  • 0
    @ 2023-11-29 18:01:06
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int f[105][105];
    int a[105][105];
    int r,c;
    int longest(int x,int y);
    int maxlong=-1000;
    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]);
    		}
    	}
    	memset(f,-1,sizeof(f));
    	for (int i=1;i<=r;i++)
    	{
    		for (int j=1;j<=c;j++)
    		{
    			int tmp=longest(i,j);
    			maxlong=maxlong>tmp?maxlong:tmp;
    		}
    	}
    	printf("%d",maxlong);
    	return 0;
    }
    int longest(int x,int y)
    {
    	if (f[x][y]<0)
    	{
    		int maxlen=0;
    		if (x>1 && a[x][y]>a[x-1][y])
    		{
    			int clen=longest(x-1,y);
    			if (maxlen<clen)
    				maxlen=clen;
    		}
    		if (y>1 && a[x][y]>a[x][y-1])
    		{
    			int clen=longest(x,y-1);
    			if (maxlen<clen)
    				maxlen=clen;
    		}
    		if (x<c && a[x][y]>a[x+1][y])
    		{
    			int clen=longest(x+1,y);
    			if (maxlen<clen)
    				maxlen=clen;
    		}
    		if (y<r && a[x][y]>a[x][y+1])
    		{
    			int clen=longest(x,y+1);
    			if (maxlen<clen)
    				maxlen=clen;
    		}
    		f[x][y]=maxlen+1;
    	}
    	return f[x][y];
    }
    
    • 1

    信息

    ID
    1349
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    47
    已通过
    16
    上传者