一道dfs和dp结合的好题 --- Longest Run on a SnowboardUVA-10285
题目链接:
https://vjudge.net/problem/19213/origin
大致题意:
一个滑雪者想知道自己在固定高度的山坡中最多能滑的距离是多少。
思路:
首先想到的就是dfs,但是。。超时了,所以我们要用到动态规划进行优化。
dfs的思路就是从第一个位置开始dfs搜索。
dp的思路就是数形的思维,每一个树的根节点就是dp[x][y]。这是一个4叉树,当dp[x1][y1] < dp[x][y]的时候进行向下递归,每次操作加上权值1,这个操作最终会返回一个最大值。
下面是AC代码:
#include <iostream>
#include <cstdio>
#include <string.h> using namespace std;
const int MX = +;
int vis[MX][MX]; //vis数组记忆化搜索,防止重复。但是在这道题貌似不需要。。。
int dp[MX][MX], mp[MX][MX];
int n, m, ans;
string name;
int xx[] = {, , -, };
int yy[] = {, , , -}; //四个方向 int dfs(int x, int y)
{
if(vis[x][y]) return dp[x][y];
for(int i = ; i < ; ++i)
{
int x1 = x+xx[i];
int y1 = y+yy[i];
if(x1 >= && x1 <= n && y1 >= && y1 <= m && mp[x1][y1] < mp[x][y]) //注意递归边界
{
dp[x][y] = max(dfs(x1, y1)+, dp[x][y]); //选权值最大的边
}
}
vis[x][y] = ; //记忆化搜索优化
return dp[x][y];
} int main()
{
int T;
scanf("%d", &T);
while(T--)
{
ans = ;
name.clear();
memset(vis, , sizeof(vis));
memset(dp, , sizeof(dp));
memset(mp, , sizeof(mp));
cin >> name;
scanf("%d %d", &n, &m); for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j)
scanf("%d", &mp[i][j]); //初始化mp数组 for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j)
{
int h = dfs(i, j);
ans = max(ans, h);
}
cout << name << ": " << ans+ << endl; //起始点也算
}
}
如有疑问,欢迎评论指出!
一道dfs和dp结合的好题 --- Longest Run on a SnowboardUVA-10285的更多相关文章
- Print Article hdu 3507 一道斜率优化DP 表示是基础题,但对我来说很难
Print Article Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)To ...
- UvaLive6661 Equal Sum Sets dfs或dp
UvaLive6661 PDF题目 题意:让你用1~n中k个不同的数组成s,求有多少种组法. 题解: DFS或者DP或打表. 1.DFS 由于数据范围很小,直接dfs每种组法统计个数即可. //#pr ...
- 63. Unique Paths II(中等, 能独立做出来的DP类第二个题^^)
Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...
- P1021 邮票面值设计(dfs+背包dp)
P1021 邮票面值设计 题目传送门 题意: 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15N+K≤15)种邮票的情况下 (假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大 ...
- dfs与dp算法之关系与经典入门例题
目录 声明 dfs与dp的关系 经典例题-数字三角形 - POJ 1163 题目 dfs思路 解题思路 具体代码 dp思路 解题思路 具体代码 声明 本文不介绍dfs.dp算法的基础思路,有想了解的可 ...
- DFS与DP算法
名词解释: DFS(Dynamic Plan):动态规划 DFS(Depth First Search):深度优先搜索 DFS与DP的关系 很多情况下,dfs和dp两种解题方法的思路都是很相似的,这两 ...
- B. Kay and Snowflake 解析(思維、DFS、DP、重心)
Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...
- UVA 10285 - Longest Run on a Snowboard (记忆化搜索+dp)
Longest Run on a Snowboard Input: standard input Output: standard output Time Limit: 5 seconds Memor ...
- LeetCode 第 3 题(Longest Substring Without Repeating Characters)
LeetCode 第 3 题(Longest Substring Without Repeating Characters) Given a string, find the length of th ...
随机推荐
- jvm学习笔记二(减少GC开销的建议)
一:触发主GC(Garbage Collector)的条件 JVM进行次GC的频率很高,但因为这种GC占用时间极短,所以对系统产生的影响不大.更值得关注的是主GC的触发条件,因为它对系统影响很明显.总 ...
- linux18.04+jdk11.0.2+hadoop3.1.2部署伪分布式
1. 下载 安装hadoop3.1.2http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz 注意 ...
- Openresty安装及使用配置(OPENRESTY+NGINX)
Openresty 简介 Openresty是一个基于NGINX和Lua的高性能Web平台,内部有大量的Lua库和第三方模块,能够很方便的搭建处理高并发,扩展性高的Web平台和动态网关,充分利用 Ng ...
- docker的安装与基本使用
安装docker curl -s https://get.docker.com|sh 好慢....一个小时吧... 启动docker 先执行命令docker version来来一下: docker v ...
- freemarker和thymeleaf的使用样例
最近需要对公司项目首页使用Java模板重做,以提高首屏加载速度和优化SEO. 在选择模板时发现freemarker和thymeleaf最为常用. 两者最大的区别在于语法,对性能方面未作测试,具体性能测 ...
- Geometric regularity criterion for NSE: the cross product of velocity and vorticity 2: $u\times \om\cdot \n\times \om$
在 [Lee, Jihoon. Notes on the geometric regularity criterion of 3D Navier-Stokes system. J. Math. Phy ...
- burp suite 基础入门超详细教程
介绍: 都是我个人了解到的信息,,分享给大家 欢迎指正 burp suite 被誉为web安全工具中的瑞士军刀. 大家知道,瑞士军刀,都是体积小,功能强悍,.西方军队的标配.说这么多,只是想强调这款工 ...
- UDP 单播、广播、多播
一.UDP广播 广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址255.255.255.255,将消息发送到在同一广播网络上的每个主机.值得强调的是:本地广播信息是不会被路由器转发.当然 ...
- 在badboy中添加检查点并且参数化
在badboy中添加检查点(使用百度搜索来举例): 1.打开badboy,在输入框中输入www.baidu.com,单击键盘回车键或者点击输入框右边的按钮进入百度页面: 2.在百度搜索框中输入搜索字, ...
- Ubuntu 16.04下安装MySQL及远程连接
最近因为要研究一个关于MySQL的漏洞,所以需要MySQL的环境,就用了近一个小时的时间搭建了一个,期间出了点问题,故记录于此. 1.首先是安装,在命令窗口中输入下面三条命令即可. sudo apt- ...