题目链接:http://poj.org/problem?id=1088
简单的搜索一遍就ok
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int Div[4][2]={{-1,0},{0,-1},{0,1},{1,0}};
int len[105][105];
int maze[105][105];
int r,c;
int dp(int x,int y)
{
if(len[x][y]!=0)return len[x][y];
int maxx=0,s;
for(int i=0;i<4;i++)
{
int tempx=x+Div[i][0];
int tempy=y+Div[i][1];
if(tempx>=0&&tempx<r&&tempy>=0&&tempy<c&&maze[tempx][tempy]<maze[x][y])
{
s=dp(tempx,tempy);
if(s>maxx)maxx=s;
}
}
len[x][y]=maxx+1;
return maxx+1;
}
int main()
{
//int r,c;
while(cin>>r>>c)
{
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
cin>>maze[i][j];
}
}
memset(len,0,sizeof(len));
int maxx=0;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
maxx=max(maxx,dp(i,j));
}
}
cout<<maxx<<endl;
}
return 0;
}