http://poj.org/problem?id=1088
dp的方法实在卡的不会做。。。搜索搞了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> using namespace std ; int map[101][101],dp[101][101] ; int r,c ; int dfs(int x,int y) { int tab[4][2]={1,0,-1,0,0,1,0,-1} ; if(dp[x][y]) return dp[x][y] ; int maxx=0 ; for(int i=0;i<4;i++) { int xx=x+tab[i][0] ; int yy=y+tab[i][1] ; if(xx<0 || xx==r || yy<0 || yy==c) continue ; if(map[xx][yy]>map[x][y]) { int temp=dfs(xx,yy) ; maxx=max(temp,maxx) ; } } dp[x][y]=maxx+1 ; return maxx+1 ; } int main() { while(~scanf("%d%d",&r,&c)) { for(int i=0;i<r;i++) for(int j=0;j<c;j++) { scanf("%d",&map[i][j]) ; dp[i][j]=0 ; } int ans=-1 ; for(int i=0;i<r;i++) for(int j=0;j<c;j++) { int temp=dfs(i,j) ; if(temp>ans)ans=temp ; } printf("%d\n",ans) ; } return 0 ; }