//为这题……整个人烦到极顶…… #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
|
|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
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 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|
公告
导航
统计
- 随笔: 84
- 文章: 7
- 评论: 49
- 引用: 0
常用链接
留言簿(6)
随笔分类
随笔档案
文章分类
文章档案
相册
百事百通
搜索
积分与排名
最新评论
阅读排行榜
评论排行榜
|
|