我是渣渣 我是渣渣 。。。。记忆化搜索 看了学长的代码 和算法竞赛入门经典这本书才勉勉强强看懂点。。。 #include <stdio.h> #include <string.h> int dir[4][2]={1,0,-1,0,0,1,0,-1};//方向 int dp[101][101],map[101][101]; int m,n; int max(int x,int y) { return x>y?x:y; } bool limit(int x,int y)//是否出界 { if(x<0||y<0||x==m||y==n) return false; return true; } int dfs(int x,int y) { if(dp[x][y]!=0) return dp[x][y]; for(int i=0;i<4;i++) { int x_i=x+dir[i][0]; int y_i=y+dir[i][1]; if(limit(x_i,y_i)&&map[x][y]>map[x_i][y_i]&&dp[x][y]<dfs(x_i,y_i)+1) dp[x][y]=dp[x_i][y_i]+1; } return dp[x][y]; } int main() { while(scanf("%d %d",&m,&n)!=EOF){ memset(map,0,sizeof(map)); memset(dp,0,sizeof(dp)); for(int i=0;i<m;i++) for(int j=0;j<n;j++) scanf("%d",&map[i][j]); int num=0; for(int i=0;i<m;i++) for(int j=0;j<n;j++) { num=max(num,dfs(i,j)); } printf("%d\n",num+1); } return 0; }
时间: 2024-10-12 08:08:28