题目地址:http://poj.org/problem?id=1088

Description

Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子

 1  2  3  4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。

Input

输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。

Output

输出最长区域的长度。

Sample Input

5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

Sample Output

25

#include <stdio.h>

int matrix[100][100];
int dp[100][100];
int R;
int C; int Max (int a, int b, int c, int d){
int max1 = (a > b) ? a : b;
int max2 = (c > d) ? c : d;
return (max1 > max2) ? max1 : max2;
} // dp[i][j] = max(dp[i-1][j], dp[i+1][j], dp[i][j-1], dp[i][j+1]) + 1
int MaxLength(int i, int j){
if (dp[i][j] > 0)
return dp[i][j];
int a = 0;
int b = 0;
int c = 0;
int d = 0;
if (i-1 >= 0 && matrix[i][j] > matrix[i-1][j]){
a = MaxLength (i-1, j);
}
if (i+1 < R && matrix[i][j] > matrix[i+1][j]){
b = MaxLength (i+1, j);
}
if (j-1 >= 0 && matrix[i][j] > matrix[i][j-1]){
c = MaxLength (i, j-1);
}
if (j+1 < C && matrix[i][j] > matrix[i][j+1]){
d = MaxLength (i, j+1);
}
return dp[i][j] = Max (a, b, c, d) + 1;
} int main(void){
int i, j;
int max; while (scanf ("%d%d", &R, &C) != EOF){
for (i=0; i<R; ++i)
for (j=0; j<C; ++j){
scanf ("%d", &matrix[i][j]);
dp[i][j] = 0;
}
for (i=0; i<R; ++i){
for (j=0; j<C; ++j){
MaxLength (i, j);
}
}
max = 0;
for (i=0; i<R; ++i){
for (j=0; j<C; ++j){
if (max < dp[i][j]){
max = dp[i][j];
}
}
}
printf ("%d\n", max);
} return 0;
}

最新文章

  1. Nginx 笔记与总结(11)Nginx + php-fpm + MySQL 安装 ecshop
  2. Lessons learned from manually classifying CIFAR-10
  3. 让阿里云的Centos,PHP组件 ImageMagick支持png和jpeg格式
  4. linux切换用户
  5. FC和SCSI
  6. 将html导出到excel或word
  7. EffectiveC#01--避免返回内部类对象的引用
  8. 关于三星手机照相机调用适配问题Android
  9. Linux入门之常用命令(12) mount
  10. TweenMax动画库学习
  11. 深入Ambari Metrics 机制分析
  12. hive 学习
  13. SpringCloud断路器监控面板——Hystrix Dashboard
  14. FastReport动态绑定只显示一条数据。
  15. 【API】检查进程是否存在 - CreateToolhelp32Snapshot
  16. android闪退日志收集
  17. as3 判断移动方向
  18. 读取、设置 php.ini配置文件(复制)
  19. tyvj 1055 沙子合并 区间dp经典模型,石子合并
  20. tomcat遇到版本问题

热门文章

  1. 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密
  2. spring mvc处理json
  3. cocos2d-x Sprite
  4. cdll和windll的差别
  5. 汉语转拼音pinyin4j
  6. windows8 认识及使用
  7. iOS开发:AVPlayer实现流音频边播边存
  8. iOS开发——数据持久化Swift篇&amp;通用文件存储
  9. ADO.Net的小知识(连接数据库)二
  10. Tomcat 配置 Probe 监控