链接:
题意:
思路:
dfs+记忆化
原本应该每个点都去搜,但是会超时,所以用记忆化搜索把答案存储在数组里,保证复杂度不会太高。
自己的问题,没有想过用返回值来存答案,dfs里的每一步都挺妙的。
#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
int a[maxn][maxn];
int ans[maxn][maxn];
int x1[5]={ 0,1,-1,0,0};
int y11[5]={0,0,0,1,-1};
int n,m;
int dfs(int x,int y)
{
int mx,my,i,j;
if(ans[x][y]!=0) return ans[x][y];
ans[x][y]=1;
for(i=1;i<=4;i++){
mx=x1[i]+x;
my=y11[i]+y;
if(a[mx][my]<a[x][y]&&mx>=1&&mx<=n&&my>=1&&my<=m){
dfs(mx,my);
ans[x][y]=max(ans[x][y],ans[mx][my]+1);
}
}
return ans[x][y];
}
int main()
{
int i,j;
cin>>n>>m;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cin>>a[i][j];
}
}
int anss=0;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
anss=max(anss,dfs(i,j));
}
}
cout<<anss<<endl;
return 0;
}