洛谷 p1434 滑雪
woc花了20分钟捏了个记忆化搜索一遍过了!!!!!我最近真的是,太太太幸运了。
题目很简单,以任意一个入口进去,打一个规规矩矩的记搜,记得入口也可以判一下,如果搜别的时候经过了它已经有了它的值,就连搜也不用搜了。
#include <iostream> #include <cstdio> using namespace std; int n,m,f[101][101],a[101][101],ans,maxn; int find(int x,int y){ if(f[x][y]>0) return f[x][y]; if(x!=1&&a[x-1][y]<a[x][y]) f[x][y]=max(f[x][y],1+find(x-1,y)); if(x!=n&&a[x+1][y]<a[x][y]) f[x][y]=max(f[x][y],1+find(x+1,y)); if(y!=1&&a[x][y-1]<a[x][y]) f[x][y]=max(f[x][y],1+find(x,y-1)); if(y!=m&&a[x][y+1]<a[x][y]) f[x][y]=max(f[x][y],1+find(x,y+1)); return f[x][y]; } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(f[i][j]==0) ans=1+find(i,j); maxn=max(ans,maxn); } } printf("%d",maxn); return 0; }