PYCMONSTER @ 2024-10-21 14:04:01
#include<bits/stdc++.h>//P1434
using namespace std;
int n,m,a[1001][1001],cnt[1001][1001];
int X[5]={1,0,-1,0},Y[5]={0,1,0,-1};
int dfs(int x,int y){
if(x>n||y>m||x<1||y<1)return 0;
int ans=1,ma=-10;
for(int i=0;i<=3;i++)
{
int xx=x+X[i],yy=y+Y[i];
if(a[xx][yy]<a[x][y])
if(cnt[xx][yy]!=0)ma=max(ma,cnt[xx][yy]);
else ma=max(ma,dfs(xx,yy));
}
return ans+ma;
}
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
int mx=-10;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cnt[i][j]=dfs(i,j),mx=max(mx,cnt[i][j]);
cout<<mx;
return 0;
}
by jyc0322 @ 2024-10-22 16:02:42
建议重新学一下记忆化,你这个写法...,抱歉,我太菜了,看不懂,感觉有问题,有个点你都没有答案。
然后注意代码不要这么写:
if(a[xx][yy]<a[x][y])
if(cnt[xx][yy]!=0)ma=max(ma,cnt[xx][yy]);
else ma=max(ma,dfs(xx,yy));
改为
if(a[xx][yy]<a[x][y]){
if(cnt[xx][yy]!=0)ma=max(ma,cnt[xx][yy]);
else ma=max(ma,dfs(xx,yy));
}