链接:
题意:
思路:
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; }