气死我啦!!!!!!!!!!!!!,因为第十行的x,y错写成maxn,导致N此TLE,靠,还让我调了两个小时,为什么这么粗心,以后碰到这种情况,先从头到尾的把代码看一遍,看是否犯了什么低级错误
dp,记忆化搜索
#include <iostream> using namespace std; const int maxn=101; int map[maxn][maxn]; int dis[maxn][maxn]; int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; int r,c; int dfs(int x,int y) { if(dis[x][y]>0) return dis[x][y]; int max=1,i,tx,ty,tdis; for(i=0;i<4;i++) { tx=x+dir[i][0];ty=y+dir[i][1]; if(tx>0&&tx<=r&&ty>0&&ty<=c&&map[x][y]>map[tx][ty]) { tdis=dfs(tx,ty); max=max>(tdis+1)?max:(tdis+1); } } dis[x][y]=max; return dis[x][y]; } int main() { while(cin>>r>>c) { memset(dis,0,sizeof(dis)); int i,j; for(i=1;i<=r;i++) { for(j=1;j<=c;j++) cin>>map[i][j]; } int td,max=0; for(i=1;i<=r;i++) { for(j=1;j<=c;j++) { td=dfs(i,j); if(max<td) max=td; } } cout<<max<<endl; } return 0; }