http://poj.org/problem?id=1088

dp的方法实在卡的不会做。。。搜索搞了

View Code
#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 ;
}