//為這題……整個人煩到極頂……
#include<iostream>
using namespace std;
int map[101][101];
int dp[101][101];//dp[i][j]表示從i j 出發能夠到達的最大長度
int m,n;
 int dir[4][2]= { {-1,0}, {1,0}, {0,-1}, {0,1}};
int dfs(int si,int sj)
  {
int k,vi,vj,mt,temp;
if(dp[si][sj] > 0)
return dp[si][sj];
mt=0;
for(k=0;k<4;k++)
 {
vi=si+dir[k][0];
vj=sj+dir[k][1];
if(vi>=1 && vi<=m && vj>=1 && vj<=n )
 {
if(map[vi][vj] > map[si][sj] )
 {
temp = dfs(vi,vj);
if(temp > mt)
mt = temp;
}
}
}//for(k=0;k<4;k++)
dp[si][sj] = mt+1;
return mt+1;
}

int main()
  {
while(cin>>m>>n)
 {
int i,j;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
 {
scanf("%d",&map[i][j]);
dp[i][j] = 0;
}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
dfs(i,j);
int M=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(dp[i][j] > M)
M = dp[i][j];
cout<<M<<endl;
}
return 0;
}
http://acm.pku.edu.cn/JudgeOnline/problem?id=1088
|
|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 |
|
公告
導航
統計
- 隨筆: 84
- 文章: 7
- 評論: 49
- 引用: 0
常用鏈接
留言簿(6)
隨筆分類
隨筆檔案
文章分類
文章檔案
相冊
百事百通
搜索
積分與排名
最新評論

閱讀排行榜
評論排行榜
|
|