动态规划问题
#include <iostream>
#include <cstring>
using namespace std;
const int MAX=105;
int g[MAX][MAX],dp[MAX][MAX];
int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
int row,col;
int rec(int x,int y)
{
if(dp[x][y]!=0)
{
return dp[x][y];
}
int max_cnt=0;
for(int i=0;i<4;++i)
{
int dx=x+dir[i][0];
int dy=y+dir[i][1];
if(dx>=0&&dx<row&&dy>=0&&dy<col&&g[dx][dy]<g[x][y])
{
if(rec(dx,dy)>max_cnt)
max_cnt=rec(dx,dy);
}
}
dp[x][y]=max_cnt+1;
return max_cnt+1;
}
int main()
{
while(cin>>row>>col)
{
memset(dp,0,sizeof(dp));
int res=0;
for(int i=0;i<row;++i)
{
for(int j=0;j<col;++j)
{
cin>>g[i][j];
}
}
for(int i=0;i<row;++i)
{
for(int j=0;j<col;++j)
{
dp[i][j]=rec(i,j);
if(dp[i][j]>res)
res=dp[i][j];
}
}
cout<<res<<endl;
}
return 0;
}