下山
Time Limit: 1000 MS Memory Limit: 65536 K
Total Submit: 271(111 users) Total Accepted: 129(101 users) Rating: Special Judge: No
Description
下面的矩阵可以想象成鸟瞰一座山,矩阵内的数据可以想象成山的高度。

可以从任意一点开始下山。每一步的都可以朝“上下左右”4个方向行走,前提是下一步所在的点比当前所在点的数值小。

例如处在18这个点上,可以向上、向左移动,而不能向右、向下移动。

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

问题是,对于这种的矩阵,请计算出最长的下山路径。
对于上面所给出的矩阵,最长路径为25-24-23-22-21-20-19-18-17-16-15-14-13-12-11-10-9-8-7-6-5-4-3-2-1,应输出结果25。
Input
输入包括多组测试用例。

对于每个用例,第一行包含两个正整数R和C分别代表矩阵的行数和列数。(1 <= R,C <= 100)

从第二行开始是一个R行C列矩阵,每点的数值在[0,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
Hint
深度优先搜索
Author
卢俊达


  DFS深搜,入门题

  深搜入门题,注意剪枝,不然会超时。

  代码:

 #include <stdio.h>
#include <string.h>
int Max,r,c;
int a[][];
int st[][];
int dx[] = {,,,-};
int dy[] = {,,-,};
bool judge(int x,int y,int h)
{
if(x< || x>r || y< || y>c) //越界
return true;
if(a[x][y]>=h) //如果下一步的山比当前这一步的要高,则不能走
return true;
return false;
}
void dfs(int x,int y,int s)
{
int i;
if(s>Max) Max = s;
for(i=;i<;i++){ //遍历四个方向
int nx = x + dx[i];
int ny = y + dy[i];
if(judge(nx,ny,a[x][y]))
continue;
if(s+ > st[nx][ny]) //剪枝,如果走这一步没有之前存储的走的路径长,则不能走这一步
st[nx][ny] = s+;
else
continue;
dfs(nx,ny,s+);
}
}
int main()
{
int i,j;
while(scanf("%d%d",&r,&c)!=EOF){
memset(st,,sizeof(st));
Max = ;
for(i=;i<=r;i++) //输入
for(j=;j<=c;j++)
scanf("%d",&a[i][j]);
for(i=;i<=r;i++) //遍历
for(j=;j<=c;j++)
dfs(i,j,);
printf("%d\n",Max);
}
return ;
}

Freecode : www.cnblogs.com/yym2013

hrbustoj 1179:下山(DFS+剪枝)的更多相关文章

  1. AcWing:165. 小猫爬山(dfs + 剪枝)

    翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. 索道上的缆 ...

  2. *HDU1455 DFS剪枝

    Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  3. POJ 3009 DFS+剪枝

    POJ3009 DFS+剪枝 原题: Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16280 Acce ...

  4. poj 1724:ROADS(DFS + 剪枝)

    ROADS Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10777   Accepted: 3961 Descriptio ...

  5. DFS(剪枝) POJ 1011 Sticks

    题目传送门 /* 题意:若干小木棍,是由多条相同长度的长木棍分割而成,问最小的原来长木棍的长度: DFS剪枝:剪枝搜索的好题!TLE好几次,终于剪枝完全! 剪枝主要在4和5:4 相同长度的木棍不再搜索 ...

  6. DFS+剪枝 HDOJ 5323 Solve this interesting problem

    题目传送门 /* 题意:告诉一个区间[L,R],问根节点的n是多少 DFS+剪枝:父亲节点有四种情况:[l, r + len],[l, r + len - 1],[l - len, r],[l - l ...

  7. HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)

    Counting Cliques Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  8. HDU 5937 Equation 【DFS+剪枝】 (2016年中国大学生程序设计竞赛(杭州))

    Equation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  9. LA 6476 Outpost Navigation (DFS+剪枝)

    题目链接 Solution DFS+剪枝 对于一个走过点k,如果有必要再走一次,那么一定是走过k后在k点的最大弹药数增加了.否则一定没有必要再走. 记录经过每个点的最大弹药数,对dfs进行剪枝. #i ...

随机推荐

  1. Java Base64、AES、SHA1、MD5加密算法

    package com.example.decript; import java.io.UnsupportedEncodingException; import java.security.Inval ...

  2. apache AddDefaultCharset

    AddDefaultCharset 指令 说明 当应答内容是text/plain或text/html时,在HTTP应答头中加入的默认字符集 语法 AddDefaultCharset On|Off|ch ...

  3. ggplot绘图学习笔记

    0.查看R的系统帮助文档 标度 scale breaks, labels, limits, labs dose <- c(20, 30, 40, 45,60) drugA <- c(16, ...

  4. 将List<int> 转换为用逗号连接为字符串

    List<, , , , }; string str = String.Join(",", testList.ConvertAll<string>(new Con ...

  5. Python打包程序

    到py2exe的官网下载程序,注意对应的python版本,比如所用的python版本为2.7,那么就下载适配2.7版本的py2exe软件 下载完成后安装(与普通软件安装方式相同) 2 将要转换的pyt ...

  6. unity缓存和浏览器缓存

    原地址:http://www.cnblogs.com/hisiqi/p/3203553.html <蒸汽之城>游戏中,为什么会黑屏?或者无法正常进入游戏? 我们在进行多项测试中发现少数用户 ...

  7. MBProgressHUD使用

    //方式1.直接在View上show HUD = [[MBProgressHUD showHUDAddedTo:self.view animated:YES] retain]; HUD.delegat ...

  8. How To Install Linux, Nginx, MySQL, PHP (LEMP) Stack on Debian 7

    https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on- ...

  9. 如何修改git的当前登录信息

    (文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 之前用的大师的git登录名,后来开通了自己的,需要换成自己的,其实修改方式很简单. $vim .gi ...

  10. HDOJ 1102 生成树

    Constructing Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...