为什么WA了一个点?求助大佬......

P1434 [SHOI2002] 滑雪

```cpp #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int dx[8]={0,0,1,-1}; const int dy[8]={1,-1,0,0}; const int MAXN=500; int n,m,ans; int a[MAXN][MAXN]; int f[MAXN][MAXN]; namespace mine { int read(void) { int num=0; bool negative=false; char c=getchar(); while(!isdigit(c) && c!='-') c=getchar(); if(c=='-') negative=true; else num=c-'0'; c=getchar(); while(isdigit(c)) { num=(num<<1)+(num<<3)+(c^48); c=getchar(); } return negative?0-num:num; } } int dfs(int x,int y) { if(f[x][y]) return f[x][y]; int t=1; for(int i=0;i<4;i++) { const int xx=x+dx[i]; const int yy=y+dy[i]; if(xx>=1 && xx<=n && yy>=1 && yy<=m && a[x][y]<a[xx][yy]) t=max(dfs(xx,yy)+1,t); } f[x][y]=t; return t; } void input(void) { using namespace mine; n=read(); m=read(); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[i][j]=read(); } void solve(void) { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { int t=dfs(i,j); f[i][j]=t; ans=max(ans,f[i][j]); } } int main() { input(); solve(); cout<<ans; return 0; } ``` 码风清奇……
by Hexarhy @ 2019-02-05 16:30:30


|