题目链接:

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的更多相关文章

  1. Print Article hdu 3507 一道斜率优化DP 表示是基础题,但对我来说很难

    Print Article Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)To ...

  2. UvaLive6661 Equal Sum Sets dfs或dp

    UvaLive6661 PDF题目 题意:让你用1~n中k个不同的数组成s,求有多少种组法. 题解: DFS或者DP或打表. 1.DFS 由于数据范围很小,直接dfs每种组法统计个数即可. //#pr ...

  3. 63. Unique Paths II(中等, 能独立做出来的DP类第二个题^^)

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...

  4. P1021 邮票面值设计(dfs+背包dp)

    P1021 邮票面值设计 题目传送门 题意: 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤15N+K≤15)种邮票的情况下 (假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大 ...

  5. dfs与dp算法之关系与经典入门例题

    目录 声明 dfs与dp的关系 经典例题-数字三角形 - POJ 1163 题目 dfs思路 解题思路 具体代码 dp思路 解题思路 具体代码 声明 本文不介绍dfs.dp算法的基础思路,有想了解的可 ...

  6. DFS与DP算法

    名词解释: DFS(Dynamic Plan):动态规划 DFS(Depth First Search):深度优先搜索 DFS与DP的关系 很多情况下,dfs和dp两种解题方法的思路都是很相似的,这两 ...

  7. B. Kay and Snowflake 解析(思維、DFS、DP、重心)

    Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...

  8. UVA 10285 - Longest Run on a Snowboard (记忆化搜索+dp)

    Longest Run on a Snowboard Input: standard input Output: standard output Time Limit: 5 seconds Memor ...

  9. LeetCode 第 3 题(Longest Substring Without Repeating Characters)

    LeetCode 第 3 题(Longest Substring Without Repeating Characters) Given a string, find the length of th ...

随机推荐

  1. Day044--javascript, ECMAScript

    一. javascript JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:操作网页上的 ...

  2. 微服务下的容器部署和管理平台Rancher

    Rancher是什么 Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台.Rancher提供了在生产环境中使用的管理Docke ...

  3. Docker:dockerfile自动构建镜像 [六]

    一.手动docker镜像的缺点 相对于手动制作的docker镜像,使用dockerfile构建的镜像有以下优点: 1.dockerfile只有几kb,便于传输 2.使用dockerfile构建出来的镜 ...

  4. 模板方法模式-Template Method(Java实现)

    模板方法模式-Template Method 在模板模式中, 处理的流程被定义在父类中, 而具体的处理则交给了子类. 类关系图很简单: Template接口 这里定义了子类需要实现的方法(before ...

  5. 计算 $\dps{\int_0^\infty\frac{\sin^2x}{x^2}dx=\frac{\pi}{2}}$

    计算 $\dps{\int_0^\infty\frac{\sin^2x}{x^2}dx=\frac{\pi}{2}}$. 由分部积分, $$\bee\label{1}\bea \int_0^\inft ...

  6. sqlserver 生成脚本执行创建索引

    create or alter proc SP_CreateIndex as begin if exists(select * from sys.objects where name='execsql ...

  7. day 14 - 2 生成器练习

    相关练习 1.处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕 #比较 low 的方法 def check_file(filename,aim): with open( ...

  8. pygame学习点滴

    pygame分为四块 引用/ 初始化/ 事件处理/ 窗口刷新 普通版壁球游戏 """ 引用部分 """ import pygame, sys ...

  9. 一张图让你懂Python安装第三方库

  10. $ Django 调API的几种方式

    API调用方式 下面是python中会用到的库.urllib2httplib2pycurlrequestsurllib2 #request import requests, json github_u ...