P1434 第一个点WA,第二个点TLE
#include <iostream>
#include <climits>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
namespace io
{
const int size=(1<<20)+1;
char buf[size],*p1=buf,*p2=buf;
inline char gc(){if(p1!=p2){return *p1++;} return p1==(p2=(p1=buf)+fread(buf,1,size-1,stdin))?EOF:*p1++;}
#ifndef ONLINE_JUDGE
#define gc getchar
#endif
#define pc putchar
inline void read(int &x){x=0;int f=1;char c;while((c=gc())<'0' || c>'9'){if(c=='-'){f=-1;}}while(c>='0' && c<='9'){x=x*10+c-'0',c=gc();}x*=f;}
inline void write(int x){if(x==0){pc('0');return;}if(x<0){x=-x;pc('-');}char s[100];int cnt=0;while(x){s[++cnt]=x%10+'0',x/=10;}while(cnt){pc(s[cnt]),--cnt;}}
}using namespace io;
int xy[4][2]= {{1,0},{0,1},{-1,0},{0,-1}},r,c,a[105][105]= {INT_MAX},ans,maxx,minn=INT_MAX,f[105][105];
void dfs(int x,int y) {
if(a[x][y]==minn) {
maxx=max(ans,maxx);
return ;
}
//if(f[x][y])
// return ;
for(int i=0; i<4; ++i) {
if(a[x+xy[i][0]][y+xy[i][1]]<a[x][y]) {
//cout<<a[x][y]<<' '<<x<<' '<<y<<endl;
++ans;
//f[x][y]=a[x][y];
dfs(x+xy[i][0],y+xy[i][1]);
//f[x][y]=0;
--ans;
}
}
}
int main() {
int x,y,m=0;
read(r);
read(c);
for(int i=1; i<=r; ++i) {
for(int j=1; j<=c; ++j) {
read(a[i][j]);
minn=min(a[i][j],minn);
}
}
for(int i=1; i<=r; ++i) {
for(int j=1; j<=c; ++j) {
dfs(i,j);
}
}
write(maxx+1);
return 0;
}