📄 1088.cpp
字号:
#include<iostream>
#include<iomanip>
using namespace std;
int r,l;
int search(int a[102][102],int c[102][102],bool v[102][102],int i,int j)
{
if(i>r||j>l)return 0;
int text,max;
max=1;
//从上,左,下,右
if(a[i-1][j]<a[i][j]&&!v[i-1][j])//上
{
text=search(a,c,v,i-1,j);
if(max<text+1)max=text+1;
}
else if(a[i-1][j]<a[i][j]&&v[i-1][j])
if(c[i-1][j]+1>max)max=c[i-1][j]+1;
if(a[i][j-1]<a[i][j]&&!v[i][j-1])//左
{
text=search(a,c,v,i,j-1);
if(max<text+1)max=text+1;
}
else if(a[i][j-1]<a[i][j]&&v[i][j-1])
if(c[i][j-1]+1>max)max=c[i][j-1]+1;
if(a[i+1][j]<a[i][j]&&!v[i+1][j])//下
{
text=search(a,c,v,i+1,j);
if(max<text+1)max=text+1;
}
else if(a[i+1][j]<a[i][j]&&v[i+1][j])
{if(c[i+1][j]+1>max)max=c[i+1][j]+1;}
if(a[i][j+1]<a[i][j]&&!v[i][j+1])//右
{
text=search(a,c,v,i,j+1);
if(max<text+1)max=text+1;
}
else if(a[i][j+1]<a[i][j]&&v[i][j+1])
{if(c[i][j+1]+1>max)max=c[i][j+1]+1;}
v[i][j]=true;
c[i][j]=max;
return max;
}
int main()
{
int a[102][102],c[102][102],i,j,text,max=0;
bool v[102][102];
for(i=0;i<102;i++)
for(j=0;j<102;j++)
{
c[i][j]=1;
v[i][j]=false;
if(i==0||j==0||i==101||j==101){a[i][j]=100000;c[i][j]=-2;}
}
cin>>r>>l;
for(i=1;i<=r;i++)
for(j=1;j<=l;j++)
cin>>a[i][j];
for(i=1;i<=r;i++)
for(j=1;j<=l;j++)
{
text=search(a,c,v,i,j);
if(text>max)max=text;
}
cout<<max<<endl;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -