这个题原来做过
结果现在忘了
再来一遍
#include<iostream> using namespace std; long long n,m,map[1005][1005],maxn,dp[1005][1005]; static const int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1}; int dfs(int x,int y) { if(dp[x][y])return dp[x][y]; int t=1; for(int i=0;i<4;i++) { int tx=x+dx[i],ty=y+dy[i]; if(map[tx][ty]>=map[x][y]||tx<=0||ty<=0||tx>n||ty>m)continue; int tmp=dfs(tx,ty)+1; t=max(t,tmp); } dp[x][y]=t; return t; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++)scanf("%d",&map[i][j]); } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { long long tmp=dfs(i,j); maxn=max(maxn,tmp); } } printf("%d",maxn); }
一个经典的dp和记忆化
后来问了dalao其实这个题的dp就是记忆化
好吧Q_Q
原文:https://www.cnblogs.com/qxds/p/9510839.html