滑雪(dfs+dp)
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 113903 | Accepted: 43478 | 
Description
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
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 show the codes:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn = ;
int n,m;
int dp[maxn][maxn];
int maze[maxn][maxn];
int dir[][] = {{,},{-,},{,-},{,}}; // 二维方向数组的一种广义表形式表示方法! bool judge(int x,int y)
{
if(x < || x > n || y < || y > m)
return false;
return true;
} int dfs(int i,int j)
{
if(dp[i][j])
return dp[i][j];
int ret = ;
for(int k = ; k < ; k++)
{
int xx = i + dir[k][];
int yy = j + dir[k][];
if(judge(xx,yy) && maze[i][j] > maze[xx][yy])
ret = max(dfs(xx,yy)+, ret);
}
dp[i][j] = ret;
return ret;
} int main()
{
while(scanf("%d %d", &n, &m) != EOF)
{
memset(dp,,sizeof(dp));
memset(maze,,sizeof(maze));
for(int i = ; i <= n; i++)
for(int j = ; j <= m; j++)
scanf("%d", &maze[i][j]);
int ans = ;
for(int i = ; i <= n; i++)
for(int j = ; j <= m; j++)
ans = max(dfs(i,j), ans);
printf("%d\n", ans);
}
return ;
}
细节讨论:
1.关于二维方向数组的表现形式:
int dir[4][2]={{1,0},{-1,0},(0,1},{0,-1}}; 2.深度优先搜索(Depth-First-Search,简称DFS)。这是一种常见的用于遍历或搜索树或者图的算法。
基本实现思想:
(1)访问(visit)顶点v;
(2)从v的未被访问的邻接点中选取一个顶点w,从w出发进行深度优先遍历;
(3)重复上述两步,直至图中所有和v有路径相通的顶点都被访问到。
3.强烈推荐(安利)优秀博文以了解dfs:
https://blog.csdn.net/liangzhaoyang1/article/details/51415719
十分感谢此博文以解决滑雪此题:
https://blog.csdn.net/chen_ze_hua/article/details/51259888
---------------------------------------------------------------人的梦想,是不会终止的!
滑雪(dfs+dp)的更多相关文章
- dfs+dp思想的结合------hdu1078
		首先是题目的意思: 从一个正方形的0,0点开始走,只能横着走,竖着走,最多走k步,下一个点的数一定要比当前这个点的值大,每走一步,就加上下一个点的数据,问数据最大能有多少. 首先遇到这种题目,走来走去 ... 
- HDU1978How Many Ways 记忆化dfs+dp
		/*记忆化dfs+dp dp[i][j]代表达到这个点的所有路的条数,那么所有到达终点的路的总数就是这dp[1][1]加上所有他所能到达的点的 所有路的总数 */ #include<stdio. ... 
- 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof
		题目传送门 /* 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + ... 
- 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
		题目传送门 /* 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操 ... 
- 【cf1111】C. Creative Snap (dfs+dp)
		传送门 简单的dfs+dp即可解决.根本不用动态开点 /* * Author: heyuhhh * Created Time: 2019/11/13 10:12:42 */ #include < ... 
- 百练1088:滑雪 【DP】+【DFS】
		总Time Limit: 1000ms Memory Limit: 65536kB Description Michael喜欢滑雪百这并不奇怪, 由于滑雪的确非常刺激.但是为了获得速度,滑的区域必须向 ... 
- 滑雪 矩阵中的最长上升路径 /// 记忆化DFS || DP oj22919
		大致题意: Description 难怪Michael喜欢滑雪,因为滑雪确实很刺激.为了获得加速度,滑雪道必须向下倾斜,而且当滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一 ... 
- POJ1088滑雪(dp+记忆化搜索)
		滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 86411 Accepted: 32318 Description ... 
- P1434 [SHOI2002]滑雪   dfs
		题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ... 
随机推荐
- 微信小程序报错TypeError: this.setData is not a function
			今天在练习小程序的时候,遇到小程序报错 对于处于小白阶段的我,遇到这种报错,真还不知道是错从何来,只有一脸蒙逼,后来通过查询,终于知道了问题所在,下面对这一问题做一记录 小程序默认中是这么写的 onL ... 
- DVA知识集合
			react与dva 原文地址:https://github.com/dvajs/dva-knowledgemap 1.变量声明 const DELAY = 1000 let count = 0 cou ... 
- Mysql快速入门(二)
			多表关联查询 JOIN 按照功能大致分为如下三类: CROSS JOIN(交叉连接) INNER JOIN(内连接或等值连接). OUTER JOIN(外连接) 交叉连接 交叉连接的关键字:CROSS ... 
- java - jdk线程池详解
			线程池参数详解 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUni ... 
- java课堂测试
			package 作业2; //信1805-1 杨一帆 20183608 public class ScoreInformation1 { private String stunumber; pr ... 
- 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(5.23)-- Format NVM command
			5.23 Format NVM command - NVM Command Set Specific Format NVM命令用于低级格式化NVM媒介.这个命令被host主机使用,来变更LBA数据大小 ... 
- Wannafly Camp 2020 Day 6I 你吓到我的马了.jpg - BFS
			暴力BFS即可 #include <bits/stdc++.h> using namespace std; int n,m,f[105][105]; char s[105][105]; s ... 
- python3练习100题——029
			原题链接:http://www.runoob.com/python/python-exercise-example29.html 题目:给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出 ... 
- jdbc中SQL语句拼接java变量
			例如:String sql = "select * from user where username='" + username + "' and password =' ... 
- maven打包忽略test文件夹
			当在项目中的test中写了单元测试后,在mvn install打包时会自动进行所有单元测试,所以这时需要忽略test文件夹 有两种方法: 1.用命令的方式:mvn install -Dmaven.te ... 
 
			
		