dfs大失败

P1434 [SHOI2002] 滑雪

@[晓柚芋兹](/user/528562) 我也是用dfs的,拿了个90分,我没用记忆化搜索,用了就100分了,你可以参考一下: ```cpp #include<bits/stdc++.h> using namespace std; int n,m,a[105][105],b[105][105],maxx,cnt=0; void dfs(int x,int y){ maxx=max(maxx,cnt); if(x-1>0&&a[x][y]>a[x-1][y]&&b[x-1][y]==0){ b[x-1][y]=1; cnt++; dfs(x-1,y); b[x-1][y]=0; cnt--; } if(y-1>0&&a[x][y]>a[x][y-1]&&b[x][y-1]==0){ b[x][y-1]=1; cnt++; dfs(x,y-1); b[x][y-1]=0; cnt--; } if(y+1<=m&&a[x][y]>a[x][y+1]&&b[x][y+1]==0){ b[x][y+1]=1; cnt++; dfs(x,y+1); b[x][y+1]=0; cnt--; } if(x+1<=n&&a[x][y]>a[x+1][y]&&b[x+1][y]==0){ b[x+1][y]=1; cnt++; dfs(x+1,y); b[x+1][y]=0; cnt--; } } int main(){ 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++){ if(a[i][j]>0){ b[i][j]=1; dfs(i,j); for(int k=1;k<=n;k++){ for(int l=1;l<=m;l++)b[k][l]=0; } } if(maxx+1==m*n){cout<<maxx+1;return 0;} }} cout<<maxx+1; return 0; } ```
by Ch35 @ 2022-07-12 10:49:48


|